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

发布于 2024-12-05 10:42:41 字数 618 浏览 0 评论 0原文

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

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)

保存了我之前定义的标准的坐标。我现在想根据 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 给我的整个向量?

I have a for loop, which returns me values from one dataframe using which, which.min and which.max giving me the "coordinates". Here an example

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 holds the coordinates for a criterium that I have defined before. I now want to extract the respective values according to those coordinates from df with a for loop

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

When I use

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

it only gives me the last expression of the loop. My simple question is now: How do I store not only the last expression from this loop, but the whole vector that is given me by print?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

软糖 2024-12-12 10:42:41

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

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

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

output <- Df[coord]

不需要循环。

You're surprised? You store every loop only that one value of the loop in output. So after the last loop it's only the last value. The correct loop solution would be :

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

But you don't have to use a loop. Given you have the coordinates in a dataframe or matrix, this can be done a whole lot simpler anyway :

output <- Df[coord]

No loop needed.

幸福还没到 2024-12-12 10:42:41

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

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

This sounds a bit like OP used SAS before, in R variables have no history. Instead of line-by-line operation in R people try to do vector-based calculation and use apply to apply a function to every entry in a vector or matrix. In more conditional cases you can use a for-loop and store the return-values as entries within it and then return or print them all at once:

my <- function() {
    outputs <- rep(0,20)
    for(i in 1:20) {
        outputs[i] <- i*i
    }
return(outputs)
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文