【问题标题】:Average county(fips) precipitation and remove stationID with dplyr平均县(fips)降水量并使用 dplyr 删除 stationID
【发布时间】:2015-02-01 20:05:31
【问题描述】:

示例数据集:https://www.dropbox.com/s/f3l2uub1cttwmf2/test.csv?dl=0

我需要做的是逐年获取每个 fips 代码的平均 APPT,然后将其减少到每个 fips 代码仅 1 次观察。这应该给我每个 fips 代码的平均 APPT(每年平均降水量)。 gridNumber 变量是位于县内的站点 ID,因此通过对这些进行平均,我应该得到 fips 代码的 1 个平均降水量。

我正在尝试使用 dplyr 执行此操作,但任何事情都可以。这是一个包含美国所有县的相当大数据集的一个小样本。

这是我尝试过的:

df3 <- test %>%
     group_by(fips, Year) %>%
     summarize(ppt = mean(APPT))

感谢您的帮助

【问题讨论】:

  • 嗯。我需要获取每个唯一的 fips 代码,获取每个 fips 代码的均值(APPT),然后将其放到每个 fips 代码的 1 个观察值。这有帮助吗?
  • 对不起,这是时间序列数据,所以每个fips代码也有一年。
  • 对于示例数据,每个 fips 代码每年似乎下降到 1 次观察
  • @akrun 是的,这就是我想要做的。
  • 我只用df334 行得到这个结果

标签: r dataframe subset dplyr


【解决方案1】:

我假设您也必须加载plyr。请查看dplyr issue。一种方法是在新的 R 控制台上执行此操作或分离 plyr 甚至 dplyr::summarize 会有所帮助。 plyr 也有 summarize 函数,因此该函数可能正在使用 plyr::summarize

df3 <- test %>%
            group_by(fips, Year) %>%
            dplyr::summarize(ppt = mean(APPT))

话虽如此,我建议不要将summarise 用于多个组,因为

 test %>%
      group_by(fips, Year) %>% 
      summarize(ppt=mean(APPT))
 #Source: local data frame [34 x 3]
 #Groups: fips #omitted the last 'Year`

虽然结果是一样的,但最近的一篇文章(没有链接)表明此分组函数与其他分组函数之间的结果存在差异。如果速度是一个问题,你可以使用data.table

library(data.table)
setDT(test)[, list(ppt=mean(APPT)), by=list(fips, Year)]

或使用base R

aggregate(APPT~fips+Year, test, mean)

【讨论】:

  • 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊我明白怎么回事了我认为总结和总结是包之间的区别?
  • @Amstell 如果您选中?summarise?summarize,您将同时拥有dplyrplyr 选项。我认为s z 没那么重要
  • 好的,谢谢。我很高兴您提出了data.table 示例,因为我认为我需要开始更多地使用它而不是 dplyr。感谢您的帮助!
  • @Amstell 没问题。我很高兴它有所帮助。
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-02
  • 1970-01-01
相关资源
最近更新 更多