R根据另一列中的值查找行值而不使用ifelse

时间:2016-10-04 15:02:11

标签: r apply

我建立了data.frame如下:

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

现在我想获取与column_name中的名称匹配的列的每一行的值。我用这样的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(),但无法让它发挥作用。

1 个答案:

答案 0 :(得分:2)

我们可以通过match使用数据集(match(df$column_name, colnames(df))),cbind的列名称1:nrow(df)创建列索引,并使用行索引({{1} }),基于此提取'df'的元素并指定它(<-)以创建'value'列。

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