我有以下的數據幀子集列表元素條件
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等等。所以這意味着什麼是錯的。
是否因爲上述方法無法擴展到大數據?還是因爲我上面概述的方法本質上是錯誤的?
不幸的是,由於我的數據量很大,我無法在此發佈。
UPDATE:經與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
你的代碼中的錯誤是'(mydf $ ID1%in%tmp $ ID2)',應該是'(mydf $ ID2%in%tmp $ ID2)'我想。 – lmo
謝謝,這只是在這個例子中的錯字 – BillyJean