我有以下数据框
mydf<- data.frame(c(1,1,3,4,5,6),
c(1,1,3,10,20,30),
c(1,10,20,20,15,10))
colnames(mydf)<-c( "ID1","ID2", "ID3")
让我们数一数有多少个实例,mydf$ID1
并且mydf$ID2
我们有它们出现两次的地方
tmp<-plyr::ddply(mydf,c("ID1","ID2"),nrow)
tmp<-tmp[tmp$V1==2,]
这有以下输出(有两个相同的实例)
ID1 ID2 V1
1 1 1 2
现在我想提取剩余的字段,即ID3
,这两个实例:
asd<-mydf[ (mydf$ID1 %in% tmp$ID1) & (mydf$ID1 %in% tmp$ID2), ]
这给了我以下内容
ID1 ID2 ID3
1 1 1 1
2 1 1 10
这正是我想要的,也是我想要的,所以一切都很好。
但是,我的真实数据集不仅包含 3 个向量,例如mydf
,而是 300 个。每个向量不仅仅是 6 个元素长,而是 +50.000
当我对我的数据运行上述方法时,我得到的条目实例不仅出现 2 次,而且出现 1、3、4 次等等。所以这意味着有些事情是错误的。
是不是因为上面的方法不能扩展到大数据?还是因为我上面概述的方法本质上是错误的?
不幸的是,由于我的数据量很大,我不能在这里发布。
更新:仅以具有 3 个向量的列表为例。实际上我的数据有很多向量,但我仍然想根据两个向量的重复项对它们进行分组。一个例子:
library(dplyr)
mydf<- data.frame(c(1, 1, 3, 4, 5, 6,0),
c(22,22, 3,10,20,30,0),
c(2, 10,20,20,15,10,0),
c(3, 10,20,20,15,10,0),
c(4, 10,20,20,15,10,15),
c(5, 99,98,98,97,99,97))
colnames(mydf)<-c( "ID1","ID2", "ID3", "ID4", "ID5", "ID6")
(mydf %>% group_by(ID5, ID6) %>% filter(n()==2))
根据需要,这会产生
ID1 ID2 ID3 ID4 ID5 ID6
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 22 10 10 10 99
2 3 3 20 20 20 98
3 4 10 20 20 20 98
4 5 20 15 15 15 97
5 6 30 10 10 10 99
6 0 0 0 0 15 97
我们可以用更简单的方式做到这一点 dplyr
library(dplyr)
mydf %>%
group_by(ID1, ID2) %>%
filter(n()==2)
如果有超过 2 列作为分组变量,我们可以使用 group_by_
mydf %>%
group_by_(.dots = names(mydf)[1:2]) %>%
filter(n()==2)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句