【问题标题】:Expand Row with Multiple Observations into Individual Rows将具有多个观察的行扩展为单独的行
【发布时间】:2017-04-09 10:41:47
【问题描述】:

只是想知道是否有一种方法可以使用 R 将具有多个观察值的行扩展为独特观察值的行?我在 Excel 电子表格中有数据,其中包含变量标题:Lease、Line、Bay、Date、Predators、Food.Index、DD、MM、YY。

在某些日期,同一行记录了多个捕食者(从 1 到 4)。其他日子只有 0。在记录了 4 个捕食者的那一天,我想以某种方式转换数据以显示四个独特的观察结果(而不是在“捕食者”下记录的一行有 4 个)。

我有1669行数据,需要展开多行

数据集示例

非常感谢您提前提供的帮助。

enter image description here

【问题讨论】:

  • 听起来您正在尝试将数据从宽格式转换为长格式。也许搜索这些术语,并在tidyr 中查看gather 以了解一种方法。
  • 感谢您的回复。我在搜索中遇到了这些功能来解决我遇到的问题,但是这些选项似乎并不能完全满足我的要求。
  • 如果您想要一个精确的解决方案,请发布一个包含代表性数据并显示您想要的输出的可重现示例。
  • images != data,请添加您的数据问题的最小示例,data <- read.table(text = "some data") 并查看指南stackoverflow.com/questions/5963269/…

标签: r


【解决方案1】:

假设您的数据位于 data.frame 中,df,一种可能的解决方案是

df.expanded <- df[rep(row.names(df), df$Predators), ]

编辑:如果您还想保留 0 个掠食者的行,您可以使用 pmax 始终返回至少一个:

df.expanded <- df[rep(row.names(df), pmax(df$Predators, 1)),]

这里pmax(df$Predators, 1) 将返回df$Predators1 的元素最大值,以便它返回一个新向量,其中每个元素至少为1,但如果该数字大于1,则取df$Predators 的值.

【讨论】:

  • 太好了,非常感谢。这行得通!记录代表每个观察的附加行。如果有 4 个掠食者,每行显示“4”,但是我可以将它们重新分配为 1。非常感谢您的帮助,非常感谢。
  • 只有一个查询,这消除了所有记录为 0 值的观察。我仍然想要这些观察结果 - 有没有办法保留这些观察结果?
  • 我已经更新了解决这种情况的答案。
  • 太棒了!非常感谢。你太棒了:)
猜你喜欢
  • 2019-06-27
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
相关资源
最近更新 更多