2015-10-20 70 views
1

我有一个数据帧到子集数据帧如下如何基于colMeans

Me You They Him  She 
1  4  6  3  233 
82  0  2  4  122 
98  2  5  2  99 

我希望得到一个新的数据帧只包含那些在colMeans是> 30列这样的结果应该

Me She 
1  233 
82 122 
98 99 

我想是这样

dfNew<-subset(df,colMeans(df[, 1:ncol(df)]>30)) 

,但得到的错误

Error in subset.data.frame(df[, 1:ncol(df)]> : 
    'subset' must be logical 

显然不知道我在做什么。

+0

可以尝试使用'dfNew <-df [colMeans(DF [,1:NcoI位(DF)]> 30),]'代替 – HubertL

+0

即不给我所需的输出。我并没有真正了解输出结果,但它不是正确的 –

+0

你在你的例子中有一个错误的@HubertL复制,你可能想要'colMeans(df [,1:ncol(df)])> 30)' (注意移动的右括号)。否则,将数据帧转换为逻辑数据(通过将每个值与30进行比较),然后采用“colMeans”,因此它们将介于0和1之间。 此外,此调用选择列,而“subset”子集按行。 总结,请参阅@ HubertL的正确答案:) – Max

回答

1

试试这个:

df[,colMeans(df)>30] 
2

我认为这是你正在寻找

这一步的东西就是我创建的数据。

Me <- c(1,82,98) 
You <- c(4,0,2) 
They <- c(6,5,5) 
Him <- c(3,4,2) 
She <- c(233,122,99) 
df <- as.data.frame(cbind(Me, You, They, Him, She)) 

这就是你想要的。

df[, sapply(df, mean) > 60]