删除具有稀疏观察的组

时间:2014-05-28 03:06:38

标签: r

假设我有这样的数据集:

 df <- data.frame(group = c(rep(1,3),rep(2,2), rep(3,2),rep(4,3),rep(5, 2)), score = c(30, 10, 22, 44, 6, 5, 20, 35, 2, 60, 14,5)) 

      group score
 1      1    30
 2      1    10
 3      1    22
 4      2    44
 5      2     6
 6      3     5
 7      3    20
 8      4    35
 9      4     2
 10     4    60
 11     5    14
 12     5     5

...

我想删除少于3个观察的组,预期结果应该是这样的:

      group score
 1      1    30
 2      1    10
 3      1    22
 4      4    35
 5      4     2
 6      4    60

有一种简单的方法吗?

3 个答案:

答案 0 :(得分:2)

@beginneR我喜欢桌子方法,但我认为你可以在没有merge的情况下离开:

key <- !table(df[, 1]) < 3
df[df[, 1] %in% names(key)[key], ]

##    group score
## 1      1    30
## 2      1    10
## 3      1    22
## 8      4    35
## 9      4     2
## 10     4    60

答案 1 :(得分:2)

此解决方案应该可以正常工作。使用ave获取每个group

的值计数
df[ ave(df$score,df$group, FUN=length) >=3  ,]

#    group score
# 1      1    30
# 2      1    10
# 3      1    22
# 8      4    35
# 9      4     2
# 10     4    60

答案 2 :(得分:0)

不是一个非常优雅的答案,但它仍然有效。

我的方法是先table()制作一个频率表 然后使用df merge freq表并删除少于3次的频率。

freqtable <- data.frame(table(df$group))
colnames(freqtable) <- c("group","freq")

mergetable <- merge(df, freqtable, by="group")
output <- mergetable[mergetable$freq>=3,][,1:2]

输出

> output
   group score
1      1    30
2      1    10
3      1    22
8      4    35
9      4     2
10     4    60
相关问题