在R数据帧的每一行中提取不同的列

在R数据帧的每一行中提取不同的列,r,R,我有一个colnames向量,它与数据帧中的行数一样长: > x <- data.frame(a=c(1,2,3), b=c(3,2,1), c=c(5,6,4)) > cols <- c("c", "a", "b") > x a b c 1 1 3 5 2 2 2 6 3 3 1 4 这看起来是正确的,但当我将其用作索引时,结果将按行返回: > x[A] [1] 2 1 5 有人知道解决这个索引问题的正确方法吗?x您期望什么?结果不是您想要的吗?我想

我有一个colnames向量,它与数据帧中的行数一样长:

> x <- data.frame(a=c(1,2,3), b=c(3,2,1), c=c(5,6,4))
> cols <- c("c", "a", "b")
> x
  a b c
1 1 3 5
2 2 2 6
3 3 1 4
这看起来是正确的,但当我将其用作索引时,结果将按行返回:

> x[A]
[1] 2 1 5

有人知道解决这个索引问题的正确方法吗?

x您期望什么?结果不是您想要的吗?我想您需要
x[cbind(seq_-along(cols),match(cols,names(x))]
我们需要
match()
部分将列名转换为列索引,这样我们就可以根据需要使用矩阵进行子集。
x <- data.frame(a=c(1,2,3), b=c(3,2,1), c=c(5,6,4))
cols <- c("c", "a", "b")

sapply(1:length(cols),function(i){x[i,cols[i]]})
[1] 5 2 1
x <- data.frame(a=c(1,2,3), b=c(3,2,1), c=c(5,6,4))
cols <- c("c", "a", "b")

sapply(1:length(cols),function(i){x[i,cols[i]]})
[1] 5 2 1