2011-05-11 35 views
2

我有以下變量和數據幀環比colums與像COLUMNNAMES半

welltypes <- c("LC","HC") 
qccast <- data.frame(
    LC_mean=1:10, 
    HC_mean=10:1, 
    BC_mean=rep(0,10) 
) 

現在我只是想看看我選的(在這種情況下,LC和HC的welltypes,但它也可能是不同的。 )

for(i in 1:length(welltypes)){ 
qccast$welltypes[i]_mean 
} 

這是行不通的,我知道。 但我如何循環這些列?

它必須發生變化,因爲welltypes是未知尺寸。

回答

3

$的第二個參數必須是第一個參數的列名稱。我還沒有運行代碼,但我期望welltypes[i]_mean是一個語法錯誤。 $[[類似,因此您可以使用paste通過[[創建列名稱字符串和子集。

例如:

qccast[[paste(welltypes[i],"_mean",sep="")]] 

根據您的代碼的其餘部分,你可能能夠做這樣的事情吧。

for(i in paste(welltypes,"_mean",sep="")){ 
    qccast[[i]] 
} 
+1

另外請注意,你可以只在welltypes循環:'的(我在welltypes)qccast [糊(I, 「平均」,月= 「_」)]]'。如果你想要的話,你可以使用單獨的[]:'qccast [paste(welltypes,「mean,sep =」_「)]' – 2011-05-11 13:45:32

+0

no獲得一個完整的數據框,這很好理解,但我需要它們分開的數據。框架 – 2011-05-11 13:49:00

2

這裏的另一種策略:

qccast[ sapply(welltypes, grep, names(qccast)) ] 
    LC_mean HC_mean 
1  1  10 
2  2  9 
3  3  8 
4  4  7 
5  5  6 
6  6  5 
7  7  4 
8  8  3 
9  9  2 
10  10  1 
0

另一種簡單的方法來訪問給定welltypes

qccast[,paste(welltypes, '_mean', sep = "")] 
+0

個人而言,我認爲這是從'data.frame'中提取列的最糟糕的方法。更好地使用'X [select]'來獲得'data.frame'或'X [[select]]'',它將一列作爲向量。 'X [,select]'給出vector或'data.frame'取決於'select'長度(除非你提供'drop = TRUE'參數)。 – Marek 2011-05-11 20:47:14

+0

@Marek。好點子。從未考慮基於'select'長度的返回類型差異 – Ramnath 2011-05-12 02:00:14