2017-08-02 50 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 
相关问题