我有一个类似于:
的数据框 a b c
1 1 2 3
2 3 4 5
3 4 5 2
4 3 5 6
.....
我正在尝试制作某种选择器函数,它将根据列名矢量(即输入向量)在a,b或c列中创建值向量:
c(a,b,c,b,...)
选择器功能的输出应为:
c(1,4,2,5,...)
我可以通过循环遍历行或使用嵌套的ifelse来实现它,但是如果有更少的列,是否有更好的(更通用的)方式?
答案 0 :(得分:2)
我们需要行/列索引来从数据集中提取值,即
df1[cbind(1:nrow(df1), match(v1, colnames(df1)))]
#[1] 1 4 2 5
v1 <- c('a','b','c','b')
df1 <- structure(list(a = c(1L, 3L, 4L, 3L), b = c(2L, 4L, 5L, 5L),
c = c(3L, 5L, 2L, 6L)), .Names = c("a", "b", "c"), class = "data.frame", row.names = c("1",
"2", "3", "4"))