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

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)

【讨论】:

以上是关于使用带有索引的矩阵从数据框中选择多个值的主要内容,如果未能解决你的问题,请参考以下文章

如何从没有索引的数据框中选择值

熊猫应用函数将多个值返回到熊猫数据框中的行

使用索引从数据框中获取值

列值不在熊猫数据框中的索引中

ACCESS VBA 从列表框中选择多个值并执行查询名称

使用组合框中的值编辑从列表框中选择的记录中的字段