【发布时间】:2019-09-26 14:43:44
【问题描述】:
我有一个列名向量,它与数据框中的行数一样长:
> 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 中为x 的每一行i 提取列cols[i],在这种情况下为5、2、1。我试图根据 Macth 创建一个包含 T 和 F 的矩阵:
> A <- matrix(rep(colnames(x),nrow(x)), nrow=nrow(x), ncol=ncol(x), byrow=TRUE) == cols
> A
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
[2,] TRUE FALSE FALSE
[3,] FALSE TRUE FALSE
这看起来是正确的,但是当我使用它作为索引时,结果是按行返回的:
> x[A]
[1] 2 1 5
有人知道解决这个索引问题的正确方法吗?
【问题讨论】:
-
你期待什么?不是您想要的结果吗?
-
我想你想要
x[cbind(seq_along(cols), match(cols, names(x)))]我们需要match()部分来将列名转换为列索引,以便我们可以根据需要使用矩阵进行子集化。
标签: r