【问题标题】:Extract different col in every row of an R data.frame [duplicate]在 R data.frame 的每一行中提取不同的 col [重复]
【发布时间】: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


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多