删除R中值小于x的行

时间:2016-01-05 16:15:25

标签: r row apply frequency

我在R中得到了一个数据框,如下所示:

V1 V2 V3
1  2  3
1  43 54
2  34 53
3  34 51
3  43 42
...

我想要删除V1值的频率低于2的所有行。所以在我的例子中,应该删除V1 = 2的行,因为值" 2"只在列中出现一次(" 1"和" 3"每次出现两次)。

我厌倦了在其中添加一个频率为V1的额外列,以删除频率为>的所有行。 1但是以下我只在额外的列中获得了NA。

data$Frequency <- table(data$V1)[data$V1]

由于

3 个答案:

答案 0 :(得分:9)

你可以试试这个:

library(dplyr)
df %>% group_by(V1) %>% filter(n() > 1)

答案 1 :(得分:3)

您还可以考虑使用data.table。我们首先计算V1中每个值的出现次数,然后对那些出现的次数进行过滤。最后,我们删除了count-column,因为我们不再需要它。

library(data.table)

setDT(dat)
dat2 <- dat[,n:=.N,V1][n>1,,][,n:=NULL]

甚至更快,感谢RichardScriven:

dat[, .I[.N >= 2], by = V1]
> dat2
   V1 V2 V3
1:  1  2  3
2:  1 43 54
3:  3 34 51
4:  3 43 42

答案 2 :(得分:0)

有了这个,你不需要加载库

res<-data.frame(V1=c(1,1,2,3,3,3),V2=rnorm(6),V3=rnorm(6))
res[res$V1%in%names(table(res$V1)>=2)[table(res$V1)>=2],]