假设我有一个看起来像这样的数据框:
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中这可能吗?怎么样?
答案 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