2016-10-04 147 views
1

我已經建立了一個data.frame如下:[R查找行值不ifelse

a b c d column_name 
1 2 3 4 a 
2 3 4 1 b 
3 4 1 2 c 
4 1 2 3 d 

現在我想,在匹配名稱的列來獲取價值的每一行,列名。我建立這樣一個ifelse像這樣:

df$value <- ifelse(df$column_name=="a", df$a, 
ifelse(df$column_name=="b", df$b, 
ifelse(df$column_name=="c", df$c, 
ifelse(df$column_name=="d", df$d, "NA")))) 

但是這不是非常漂亮和高效。有了更多4個可能的列,它變得不可能使用。

有誰知道更高效和美觀的方式?我試過apply(),但無法啓動它。

回答

2

我們可以創建match列索引荷蘭國際集團的「列名」與數據集的列名(match(df$column_name, colnames(df))),cbind它與行指數(1:nrow(df)),解壓基於這個「東風」的元素和分配(<-)它創建'值'列。

df$value <- df[-ncol(df)][cbind(1:nrow(df), match(df$column_name, colnames(df)))] 
df$value 
#[1] 1 3 1 3 
+1

謝謝你的快速和清晰的解釋! – Jesse