2013-07-11 40 views
2

我想知道一個用於根據某些條件選擇列的命令。例如,假設我有一個N + 5列的數據幀(其中,N是任意的/未知)像這樣:從數據框中選擇一組符合條件的列

>mydf 
Name Meta1 Meta2 ... MetaN A B C D 
Alice a1 a2 ... aN 1 0 1 0 
Bob b1 b2 ... bN 2 1 2 1 

我想通過使用柱裝置A的事實,得到下面的數據幀和C大於1(或等同於B和D的列均值小於1)。

>mydf 
Name Meta1 Meta2 ... MetaN A C 
Alice a1 a2 ... aN 1 1 
Bob b1 b2 ... bN 2 2 

我試着將子集命令的「選擇」選項與邏輯操作和colMeans命令結合起來無濟於事。我最近得到這個權利是非常複雜的。我試過尋找可以做到這一點的命令,但尚未發現任何。

編輯:通過「MetaN」的列名稱「Meta1」應該被認爲是佔位符,而不一定是列的實際名稱。他們可以爲所有意圖和目的使用N個隨機顏色名稱。

回答

2

好這個工程:

drop <- names(which(colMeans(mydf[-c(1, N+1)])<1)) 
mydf[!(colnames(mydf) %in% drop)] 

關於這樣做的好處是,如果在數據幀,我們有「META1」到「梅坦」包含「藍」的N個隨機顏色的名稱進行替換,「靛藍」,...「芥末」(分別),這仍然有效。即使顏色的數量N是未知的,但我們知道最後一個是「芥末」,我們只需要做一些小的修改。在使用顏色的示例中,我們只需將「drop」更改爲此即可,

drop <- names(which(colMeans(mydf[-c(1, which(colnames(mydf)=="Mustard")])<1)) 

並且產生相同的效果。

3

有幾種直接的方法。您可以在這裏使用colMeans函數。這假定您的data.frame被稱爲「mydf」。

> mydf[c("Name", names(which(colMeans(mydf[-1]) > 1)))] 
    Name A C 
1 Alice 1 1 
2 Bob 2 2 
+0

+1 - 變化的主題:'data.frame(mydf [1],mydf [-1] [colMeans(mydf [-1])> 1])' – thelatemail

+0

嗨阿南達,我試過適應你對我的實際問題的回答,但已經碰壁了。我已經編輯了我的問題,以便稍微泛化並更好地反映我的問題。 –

+0

做出簡單的改變(其中'N'是你的'Nth'列) mydf [c(「Name」,names(colMeans(mydf [-c(1:N)])> 1))) ]' – Metrics

相關問題