使用频率在R中提取变量

时间:2015-01-22 01:44:02

标签: r data-mining

假设我有一个数据帧:

 x  y
 a  1
 b  2
 a  3
 a  4
 b  5
 c  6
 a  7
 d  8
 a  9
 b 10
 e 12
 b 13
 c 15

我想创建另一个数据框,其中仅包含至少发生3次的x值(在这种情况下为ab),以及它们的最高对应{{1值。

所以我希望输出为:

y

此处x y a 9 b 13 9分别是13a的最高值

我尝试使用:

b

但它不起作用。

2 个答案:

答案 0 :(得分:7)

data.table包很适合这个。如果df是原始数据,则可以执行

library(data.table)
setDT(df)[, .(y = max(y)[.N >= 3]), by=x]
#    x  y
# 1: a  9
# 2: b 13

.N是一个整数,它告诉我们每组中有多少行(我们在此设置为x)。因此,我们只需将max(y)分组,使.N至少为三个。

答案 1 :(得分:6)

这是一种方法,使用subset省略少于3次的x,然后aggregate按群组查找最大值:

d <- read.table(text='x y
a 1
b 2
a 3
a 4
b 5
c 6
a 7
d 8
a 9
b 10
e 12
b 13
c 15', header=TRUE)


with(subset(d, x %in% names(which(table(d$x) >= 3))),
     aggregate(list(y=y), list(x=x), max))

#   x  y
# 1 a  9
# 2 b 13

好的衡量标准是dplyr方法:

library(dplyr)
d %>% 
  group_by(x) %>% 
  filter(n() >= 3) %>% 
  summarise(max(y))


# Source: local data frame [2 x 2]
# 
#    x max(y)
# 1 a      9
# 2 b     13