2017-08-02 48 views
3

我想知道如何根據列中三重列的外觀來對數據進行子集劃分。如何通過一式三份對列進行子集劃分?

t <- c(1,1,2,2,3,3,4,4,5,5,5,6,6,7,7,7,8,8) 

mydf <- data.frame(t, 1:18) 

我希望能夠抓住唯一對應於一式三份在塔T的行,這樣我就可以形成只有那些行的新數據幀。這應該是這樣的,其中P是行我在尋找的載體:

p <- c(9,10,11,14,15,16) 

myidealdf[p,] 

很抱歉,如果這是不明確,這是我的第一篇文章

+0

當然這是一個重複,但無法找到它:'是myDF [與(myDF上,AVE(seq_along(T),T,FUN =長度)== 3),]' – thelatemail

+0

的可能的複製https://stackoverflow.com/questions/3919205/using-r-delete-rows-when-a-value-repeated-less-than-3-times – thelatemail

回答

3

這應該這樣做

keeps <- unique(t)[table(as.factor(t)) == 3] 
keeps <- t %in% keeps 
mydf <- mydf[keeps, ] 
+0

你打敗了我! - 一個稍微簡單的版本:'mydf [mydf $ t%in%which(table(mydf $ t)== 3),]' – SymbolixAU

+1

最後! :)請記住,只有當t是從1開始的單調遞增序列(由於'which'調用)時,您的版本纔會起作用。 –

+0

首先將't'轉換爲因子可能更安全,然後它只是'mydf [t%%levels(t)[table(t)== 3],''' –

0

使用rle函數。

which(t %in% with(rle(t), values[lengths==3])) 
[1] 9 10 11 14 15 16 
相關問題