2012-11-28 33 views
0

我想通過正則表達式從數據框中選擇多個列。問題是,我想使用存儲在另一個框架中的單詞來執行此操作。更具體地,mycounts數據幀的列名:和通過從不同的框架創建的正則表達式選擇列

aa1 aa2 aa3 bb1 bb2 bb3 ff1 ff2 ff3 cc1 cc2 cc3 dd1 dd2 dd3 

我想提取的幀分離以下對(mypairs):

aa bb 
aa cc 
bb cc 
cc dd 
dd ff 

其中AA和BB分別表示用於向列開始圖案從mycounts中選擇。

我能得到的東西手動將所需的圖案是這樣的:

tmpdf <- subset(mycounts.test, select=(names(mycounts)[grep('^aa|^bb',names(mycounts))])) 

做tmpdf東西 選擇mypairs下一對從mycounts 萃取柱與tmpdf等再次做同樣的事情

,但總是會有mypairs強制執行的輸出列模式。用「|」在grep而不是獲得dd然後ff列我有它然後dd。所以我做:

tmpdf1 <- subset(mycounts.test, select=(names(mycounts)[grep('^dd',names(mycounts))])) 
tmpdf2 <- subset(mycounts.test, select=(names(mycounts)[grep('^ff',names(mycounts))])) 
tmpdf <- cbind(tmpdf1, tmpdf2)) 

最重要的是,從mypairs的只是第一列天真構建的正則表達式不起作用:

for (i in 1:nrow(mypairs)) { foo <- paste('^', mypairs[i,1], sep=""); print(grep(foo, mycounts)) } 

這我在哪裏卡住了。非常感謝您的幫助。

+0

@Andrie:對不起,沒有張貼,並重新格式化它的時候了,但我是速度不夠快 – darked89

回答

4

您沒有使用names功能在最後的命令:

更換

print(grep(foo, mycounts)) 

print(grep(foo, names(mycounts))) 
+0

我的頭撞在桌子上了......非常感謝。 – darked89