删除值频率小于 R 中的 x 的行
Delete rows with value frequencies lesser than x in R
我在 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]
谢谢
你可以试试这个:
library(dplyr)
df %>% group_by(V1) %>% filter(n() > 1)
您也可以考虑使用data.table。我们首先计算 V1 中每个值的出现次数,然后过滤那些出现次数大于 1 的次数。最后,我们删除了我们不再需要的 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
有了这个你就不需要加载库了
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],]
我在 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]
谢谢
你可以试试这个:
library(dplyr)
df %>% group_by(V1) %>% filter(n() > 1)
您也可以考虑使用data.table。我们首先计算 V1 中每个值的出现次数,然后过滤那些出现次数大于 1 的次数。最后,我们删除了我们不再需要的 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
有了这个你就不需要加载库了
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],]