使用列名变量按行选择数据框值

rim*_*rob 5 r subset dataframe

假设我有一个如下所示的数据框:

dframe = data.frame(x = c(1, 2, 3), y = c(4, 5, 6))
#   x y
# 1 1 4
# 2 2 5
# 3 3 6
Run Code Online (Sandbox Code Playgroud)

以及一个列名向量,数据框的每行一个:

colname = c('x', 'y', 'x')

对于数据框的每一行,我想从向量中的相应列中选择值。类似于dframe[, colname]但对于每一行。

因此,我想获得c(1, 5, 3)(即第 1 行:col“x”;第 2 行:col“y”;第 3 行:col“x”)

the*_*ail 5

我最喜欢的旧矩阵索引会解决这个问题。只需传递具有相应行/列索引的 2 列矩阵:

rownames(dframe) <- seq_len(nrow(dframe))
dframe[cbind(rownames(dframe),colname)]
#[1] 1 5 3
Run Code Online (Sandbox Code Playgroud)

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

dframe[cbind(seq_len(nrow(dframe)), match(colname,names(dframe)))]
#[1] 1 5 3
Run Code Online (Sandbox Code Playgroud)