2016-10-04 93 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