按因子

时间:2018-01-06 12:35:02

标签: r

我有一个类似于:

的数据框
     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来实现它,但是如果有更少的列,是否有更好的(更通用的)方式?

1 个答案:

答案 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"))