通过列名变量选择数据框列

时间:2018-06-29 03:05:39

标签: r dataframe

假设我有一个看起来像这样的数据框:

dframe = data.frame(x = c(1, 2, 3), y = c(4, 5, 6))

假设我想适应性地获取另一列,这样,对于dframe的每一行,我都会得到colname = c('x', 'y', 'x')

我想做类似于dframe[, colname]的事情以获得c(1、5、3)。

在R中这可能吗?怎么样?

2 个答案:

答案 0 :(得分:4)

我最喜欢的旧矩阵索引将解决此问题。只需传递一个具有各自行/列索引的2列矩阵:

rownames(dframe) <- seq_len(nrow(dframe))
dframe[cbind(rownames(dframe),colname)]
#[1] 1 5 3

或者,如果您不想添加行名:

dframe[cbind(seq_len(nrow(dframe)), match(colname,names(dframe)))]
#[1] 1 5 3

答案 1 :(得分:1)

一个人可以使用mapply来传递{{1}的rownumber的参数和列名的向量(每一行)以返回特定的列值。

使用dframe的解决方案可以是:

mapply

尽管,下一个选项可能不是很直观,但是如果某人想要dframe = data.frame(x = c(1, 2, 3), y = c(4, 5, 6)) colname = c('x', 'y', 'x') mapply(function(x,y)dframe[x,y],1:nrow(dframe), colname) #[1] 1 5 3 链中的解决方案,那么使用dplyr的方法可以是:

gather