我建立了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()
,但无法让它发挥作用。
答案 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