使用带有索引的矩阵从数据框中选择多个值
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你很惊讶吗?您仅在输出中存储每个循环的该循环的一个值。因此,在最后一个循环之后,它只是最后一个值。正确的循环解决方案是:
但您不必使用循环。假设您有数据框或矩阵中的坐标,无论如何这都可以简单得多:
不需要循环。
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 :
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 :
No loop needed.
这听起来有点像OP之前使用SAS,在R中变量没有历史记录。人们尝试进行基于向量的计算,并使用
apply
将函数应用于向量或矩阵中的每个条目,而不是在 R 中逐行运算。在更多条件情况下,您可以使用 for 循环并将返回值存储为其中的条目,然后一次返回或打印它们: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: