使用频率提取 R 中的变量

extracting variables in R using frequencies

假设我有一个数据框:

 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),以及它们对应的最高 y 值。

所以我希望输出为:

x   y
a   9
b   13

这里913分别是ab的最大值

我尝试使用:

sort-(table(x,y)) 

但是没有用。

这里有一个方法,使用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

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 至少是三个。