附加到数据帧中特定值的 for 循环中的向量

Posted

技术标签:

【中文标题】附加到数据帧中特定值的 for 循环中的向量【英文标题】:Appending to a vector in a for-loop of a specific value from a data frame 【发布时间】:2022-01-18 20:38:51 【问题描述】:

我最近在一项非常简单的任务中遇到了问题。因此,我有一个名为 tissue.position 的数据框,其中包含一个 x 位置(在第 5 列中)和一个 y 位置(在第 6 列中)。我只想提取具有特定索引位置的特定元素,而我需要提取的元素位置的索引存储在一个名为index_of_matched 的向量中。我想提取具有这些特定索引的元素以及相应的 x 和 y 位置。我有以下代码:

x_position <- c()
y_position <- c()

for (i in length(index_of_matched)) 
  a = index_of_matched[i]
  x_position <- append(x_position, as.vector(tissue.position[a,5]))
  y_position <- append(y_position, as.vector(tissue.position[a,6]))


spatial.data <- data.frame(x_position,y_position)

spatial.data 是我存储特别选择的 x 和 y 坐标的数据框的名称。但是,当我运行代码时,我不知何故只能分别获得一个用于 x 和 y 坐标的元素。当我检查要提取的索引数量时,它大约是 3700,这意味着有问题。输出似乎是坐标的总和。这是输出:

x-position  y-position
22117   19328       

我的代码哪里出错了?提前感谢您的帮助!

【问题讨论】:

如果没有可重现的示例,很难判断,但是,您可以执行 spatial.data &lt;- data.frame(tissue.position[index_of_matched, 5:6]),然后根据需要重命名列。 【参考方案1】:

主要的错误是i in length(index_of_matched) 只是一个数字,而不是遍历一个范围。更正后的版本是 i in seq_along(index_of_matched)

但是,像这样使用 for 循环是不习惯的,因为 R 有更多表达方式来完成同样的事情:

x_position <- tissue.position[index_of_matched, 5]
y_position <- tissue.position[index_of_matched, 6]

spatial.data <- data.frame(x_position,y_position)

或者,既然tissue.position 已经是data.frame,那么简单

spatial.data <- tissue.position[index_of_matched, c(5,6)]

【讨论】:

当然......我完全忘记了你可以在没有for循环的情况下完成这个。我对 R 很陌生,而且我更习惯于 Python,所以我在考虑 Python。谢谢你,非常感谢你的帮助!

以上是关于附加到数据帧中特定值的 for 循环中的向量的主要内容,如果未能解决你的问题,请参考以下文章

使用 for 循环命名向量

获取具有特定数量的重复值的行

R向量/数据帧中的基本滞后

for 循环到 unlist(),选择向量元素并转换类 - 循环、列表、向量、选择

for 循环只打印一半的值(使用向量)

如何在 C++ 中使用 for 循环输出向量中的所有对象