【问题标题】:Select multiple values from a dataframe using a matrix with indices使用带有索引的矩阵从数据框中选择多个值
【发布时间】:2011-09-19 12:31:57
【问题描述】:

我有一个 for 循环,它使用 which、which.min 和 which.max 从一个数据帧中返回值给我“坐标”。这里是一个例子

df <- as.data.frame(matrix(rnorm(11284), nrow=403, ncol=28))
row <- matrix(data=c(1:403),nrow=403, ncol=1)
col <- matrix(rnorm(403,14,3), nrow=403, ncol=1)
col <- round(col, 0)
coord <- cbind(row, col)

Coord 保存我之前定义的标准的坐标。我现在想使用 for 循环根据 df 中的那些坐标提取相应的值

for (i in 1:nrow(coord)) {
print(df[coord[i,1], coord[i,2]])
}

当我使用时

output <- df[coord[i,1], coord[i,2]])

它只给了我循环的最后一个表达式。我现在的简单问题是:如何不仅存储此循环中的最后一个表达式,还存储 print 给我的整个向量?

【问题讨论】:

  • 欢迎来到 SO。我将标题更改为更能代表您的问题的内容。如果您不同意,请随时改回来。另请参阅FAQ

标签: r save selection dataframe


【解决方案1】:

你很惊讶吗?您仅将每个循环的一个值存储在输出中。所以在最后一个循环之后它只是最后一个值。正确的循环解决方案是:

output <- vector(length=nrow(coord))
for (i in 1:nrow(coord)){
    output[i] <- df[coord[i,1],coord[i,2]]
}

但您不必使用循环。鉴于您在数据框或矩阵中有坐标,无论如何都可以简单得多:

output <- Df[coord]

不需要循环。

【讨论】:

    【解决方案2】:

    这听起来有点像 OP 之前使用 SAS,在 R 变量中没有历史。代替 R 中的逐行操作,人们尝试进行基于向量的计算并使用apply 将函数应用于向量或矩阵中的每个条目。在更多有条件的情况下,您可以使用 for 循环并将返回值存储为其中的条目,然后一次返回或打印它们:

    my <- function() {
        outputs <- rep(0,20)
        for(i in 1:20) {
            outputs[i] <- i*i
        }
    return(outputs)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 2014-11-27
      相关资源
      最近更新 更多