基于条件子集列表元素

比利让

我有以下数据框

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章