我觉得这应该很简单,但我想不出来。我想从一个数据帧中按组选择第二个观察。
例如:
Row Number Email
1 xxxx
2 xxxx
3 xxxx
4 xxxx
5 xxxx
6 yyyy
7 yyyy
8 zzzz
9 zzzz
10 zzzz
11 zzzz
12 zzzz我想:
Row Number Email
2 xxxx
7 yyyy
9 zzzz看来,data.table解决方案和聚合解决方案正在跳过它们应该捕获的一组电子邮件。下面是它应该捕获的前6秒行:
Row Number emails expected output actual output
1 aaaa
2 aaaa aaaa aaaa
3 aaaa
4 aaaa
5 aaaa
6 aaaa
7 aaaa
8 bbbb
9 bbbb bbbb bbbb
10 cccc
11 cccc cccc cccc
12 cccc
13 cccc
14 cccc
15 cccc
16 cccc
17 dddd NA
18 eeee
19 eeee eeee
20 eeee
21 ffff
22 ffff ffff ffff电子邮件'eeee‘在数据集中有一行,所以我希望安娜排在这一行。电子邮件'dddd‘在原始数据集中有三行,所以我希望这封电子邮件的第二行,但它不在那里。
发布于 2015-03-25 20:29:01
或者使用data.table
library(data.table)
setDT(df)[, .SD[2L], by = Email]
# Email Row.Number
# 1: xxxx 2
# 2: yyyy 7
# 3: zzzz 9或有基R
aggregate(. ~ Email, df, function(x) x[2L])
# Email Row.Number
# 1 xxxx 2
# 2 yyyy 7
# 3 zzzz 9编辑:使用新的数据集
df <- read.table(text = "'Row Number' emails
1 aaaa
2 aaaa
3 aaaa
4 aaaa
5 aaaa
6 aaaa
7 aaaa
8 bbbb
9 bbbb
10 cccc
11 cccc
12 cccc
13 cccc
14 cccc
15 cccc
16 cccc
17 dddd
18 eeee
19 eeee
20 eeee
21 ffff
22 ffff", header = TRUE)运行代码
setDT(df)[, .SD[2L], by = emails]
# emails Row.Number
# 1: aaaa 2
# 2: bbbb 9
# 3: cccc 11
# 4: dddd NA
# 5: eeee 19
# 6: ffff 22发布于 2015-03-25 20:31:39
尝尝这个。不需要一揽子方案:
subset(DF, ave(RowNumber, Email, FUN = seq_along) == 2)或
DF[ ave(DF$RowNumber, DF$Email, FUN = seq_along) == 2, ]使用下面注中所示的数据,这两行都会产生三行:
RowNumber Email
2 2 xxxx
7 7 yyyy
9 9 zzzz示例数据没有单行组,问题也没有指定如何处理这些组,但是这些答案不会为这些组生成任何行。我认为您会发现,有些答案给出了相同的结果,而另一些则给出了将RowNumber字段设置为NA的行。
注:
我们将其用于输入数据DF
Lines <- "RowNumber Email
1 xxxx
2 xxxx
3 xxxx
4 xxxx
5 xxxx
6 yyyy
7 yyyy
8 zzzz
9 zzzz
10 zzzz
11 zzzz
12 zzzz"
DF <- read.table(text = Lines, header = TRUE)下次请提供代码以创建问题中的输入数据。
发布于 2015-03-25 20:28:29
您可以使用包dplyr来尝试这一点。
d <- read.table(header = TRUE, text = "
Number Email
1 xxxx
2 xxxx
3 xxxx
4 xxxx
5 xxxx
6 yyyy
7 yyyy
8 zzzz
9 zzzz
10 zzzz
11 zzzz
12 zzzz")
library(dplyr)
group_by(d, Email) %>%
slice(2)
# Source: local data frame [3 x 2]
# Groups: Email
# Number Email
# 1 2 xxxx
# 2 7 yyyy
# 3 9 zzzzhttps://stackoverflow.com/questions/29265821
复制相似问题