2015-10-20 57 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]