如何使用列值作为列名?

时间:2019-02-04 04:41:52

标签: r

我有一个数据框,其中包含一些包含数据的列以及一个包含列名称的列:

mydf <- data.frame(
  "aa" = 11:15,
  "ab" = 21:25,
  "ac" = 31:35,
  "nn" = c("aa", "aa", "ac", "ab", "aa"))

我想从“ aa”,“ ab”或“ ac”列获取向量。每行的列名称在“ nn”列中指定。

所以我应该得到11, 12, 33, 24, 15

可以做到没有循环吗? mydf[mydf$nn]不起作用。

2 个答案:

答案 0 :(得分:2)

我们可以使用match返回列名的索引,然后创建行/列索引以提取值

mydf[-4][cbind(seq_len(nrow(mydf)), match(mydf$nn, names(mydf)))]
#[1] 11 12 33 24 15

答案 1 :(得分:1)

我们可以使用cbind创建一个行列索引,然后使用它来对数据帧进行子集化。

mydf[cbind(1:nrow(mydf), mydf$nn)]
#[1] "11" "12" "33" "24" "15"

或者,如果您知道他们将永远是数字

as.numeric(mydf[cbind(1:nrow(mydf), mydf$nn)])
#[1] 11 12 33 24 15

其中

cbind(1:nrow(mydf), mydf$nn) #gives

#     [,1] [,2]
#[1,]    1    1
#[2,]    2    1
#[3,]    3    3
#[4,]    4    2
#[5,]    5    1