使用带有索引的矩阵从数据框中选择多个值
Posted
技术标签:
【中文标题】使用带有索引的矩阵从数据框中选择多个值【英文标题】: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。 【参考方案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)
【讨论】:
以上是关于使用带有索引的矩阵从数据框中选择多个值的主要内容,如果未能解决你的问题,请参考以下文章