【问题标题】:Spread won't work? Error: Each row of output must be identified by a unique combination of keys传播不行吗?错误:每行输出必须由唯一的键组合标识
【发布时间】:2019-10-22 01:39:46
【问题描述】:

我在尝试做一些我觉得很简单的事情时遇到了问题。

我有一个这样的数据集,年份跨度为 1998 年到 2017 年,州是巴西的州,然后它列出了每月的火灾数量:

year state month     number
<int> <fct> <fct>      <dbl>
1998 Acre  January        0
1998 Acre  February       0
1998 Acre  March          0
1998 Acre  April          0
1998 Acre  May            0
1998 Acre  June           3
1998 Acre  July          37
1998 Acre  August       130
1998 Acre  September    509
1998 Acre  October       44

我想将其更改为宽格式,以便它列出年份和年份的总数,而没有有关月份和状态的信息,这样我就可以绘制该期间的趋势图。我正在设想这样的数据:

year number
1998 (count)
1999 (count)
2000 (count)

我已经有一段时间没有使用 R 并且对数据操作有点生疏了,我尝试了很多东西,比如一起使用 spread()group_by(),但我一直收到错误:

错误:每行输出必须由唯一的键组合标识。

关于如何解决这个问题的任何想法?抱歉这个超级简单的问题!

提前致谢!

【问题讨论】:

  • 两件事:这是一个常见错误,源于数据中存在重复项,因此不清楚哪些行应转换为哪些列。但是,如果没有看到您的代码,就不清楚您做了什么以及您是如何得到该错误的。我不确定你为什么需要 spread 开始,因为你显示为你想要的输出不需要它
  • 这是引发错误的代码:fireCount1998_2017 %>% spread(year, number)
  • 我在一些关于如何实现我在问题空间中概述的预期结果的反复试验中使用了它。我知道实现结果可能不需要这种方法,但值得一提的是我已经尝试过的方法。关于如何实现我的结果的任何想法?
  • 如果有更多的代码或解释,你可以edit它进入问题。您可能只想将对group_by 的调用与对summarise 的调用结合起来,但由于您发布的数据仅包括一年和一个州,因此尚不清楚。 See here 提出一个易于帮助的 R 问题

标签: r dplyr tidyr


【解决方案1】:

假设你的数据是这样的:

x <- tibble::tribble(
  ~year, ~state,   ~month, ~number,
   1998, "Acre",   "January", 0,
   1998, "Acre",  "February", 0,
   1998, "Acre",     "March", 0,
   1998, "Acre",     "April", 0,
   1998, "Acre",       "May", 0,
   1998, "Acre",      "June", 3,
   1998, "Acre",      "July", 37,
   1998, "Acre",    "August", 130,
   1998, "Acre", "September", 509,
   1998, "Acre",   "October", 44
  )

你可以使用:

x %>% dplyr::group_by(year) %>% dplyr::summarise(number = sum(number))

【讨论】:

  • 谢谢!这行得通,我知道我可能想错了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2018-01-10
  • 2021-02-13
  • 2018-07-10
  • 1970-01-01
相关资源
最近更新 更多