R根据没有ifelse的另一列中的值查找行值
R find row value based on value in another column without ifelse
我有一个 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()
,但无法正常工作。
我们可以通过 match
将 'column_name' 与数据集的列名称 (match(df$column_name, colnames(df))
),cbind
与行索引 ( 1:nrow(df)
), 在此基础上提取'df'的元素并赋值(<-
)创建'value'列。
df$value <- df[-ncol(df)][cbind(1:nrow(df), match(df$column_name, colnames(df)))]
df$value
#[1] 1 3 1 3
我有一个 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()
,但无法正常工作。
我们可以通过 match
将 'column_name' 与数据集的列名称 (match(df$column_name, colnames(df))
),cbind
与行索引 ( 1:nrow(df)
), 在此基础上提取'df'的元素并赋值(<-
)创建'value'列。
df$value <- df[-ncol(df)][cbind(1:nrow(df), match(df$column_name, colnames(df)))]
df$value
#[1] 1 3 1 3