使用带索引的矩阵从数据框中选择多个值

时间:2011-09-19 12:31:57

标签: r save selection dataframe

我有一个for循环,它返回一个数据帧的值,使用哪个,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保存我之前定义的标准的坐标。我现在想根据来自df的那些坐标用for循环

提取相应的值
for (i in 1:nrow(coord)) {
print(df[coord[i,1], coord[i,2]])
}

当我使用

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

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

2 个答案:

答案 0 :(得分:3)

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

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

但你不必使用循环。假设您拥有数据框或矩阵中的坐标,那么无论如何都可以做得更简单:

output <- Df[coord]

不需要循环。

答案 1 :(得分:0)

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

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