R中的dplyr中的“添加缺少的分组变量”消息

xqkwcwgp  于 2023-05-04  发布在  其他
关注(0)|答案(4)|浏览(162)

我的脚本中有一部分以前运行得很好,但最近产生了一个奇怪的语句,之后我的许多其他函数都不能正常工作。我试图在每个站点的值的排名列表中选择第8和第23位,以找到每个站点30年来一年中每天的第25和第75百分位值。我的方法如下(适用于四行数据集-切片(3)通常是我完整的30年数据集的切片(23)):

library(“dplyr”)

mydata <- data.frame(
  station_number = factor(rep("01AD002", 4L)),
  year = 1981:1984,
  month = rep(1L, 4L),
  day = rep(1L, 4L),
  value = c(113, 8.329999924, 15.60000038, 149)
)

以前,我会留下一个表,每个站点有一个值来描述第25个百分点(因为arrange函数似乎将它们从高到低排序)。然而,现在当我运行这些行时,我得到一条消息:

Adding missing grouping variables: `month`, `day`, `station_number`

这个消息对我来说没有意义,因为分组变量在我的表中很清楚。同样,直到最近,这一直运作良好。我试过:

  • detatch(“plyr”)-因为我在dplyr之前加载了它
  • dplyr::group_by -将其直接放置在group_by行中
  • 卸载并重新安装dplyr,尽管这是我遇到的另一个问题

你知道为什么我会收到这条消息吗?为什么它会停止工作?
谢谢你的帮助
更新:添加了一个站点的dput示例,但多年的1月1日值。希望一旦分组就返回位置值,例如slice(3)希望为这个较小的子集返回15.6的值。

dl5txlt9

dl5txlt91#

为了保持一致性,分组变量在之前定义时应该始终存在,因此在执行select(value)时添加。ungroup应该解决它:

qu25 <- mydata %>% 
  group_by(month, day, station_number) %>%
  arrange(desc(value)) %>% 
  slice(2) %>% 
  ungroup() %>%
  select(value)

请求的结果没有警告:

> mydata %>% 
+   group_by(month, day, station_number) %>%
+   arrange(desc(value)) %>% 
+   slice(2) %>% 
+   ungroup() %>%
+   select(value)
# A tibble: 1 x 1
  value
  <dbl>
1   113
aurhwmvo

aurhwmvo2#

您还可以使用data.frame()在select语句之前将tibble转换为 Dataframe 。然后dplyr就失去了对分组变量的跟踪,不再担心它们了。

qu25 <- mydata %>% 
      group_by(month, day, station_number) %>% 
      arrange(desc(value)) %>% 
      slice(3) %>% 
      data.frame() %>%
      select(value)
p3rjfoxz

p3rjfoxz3#

你最近是不是偶然更新了dplyr?我想知道你的dplyr::arrange调用是否受到了https://blog.rstudio.org/2016/06/27/dplyr-0-5-0/的不利影响

Breaking changesarrange()再次忽略分组,恢复到dplyr 0.3及更早版本的行为。这使得arrange()与其他dplyr动词不一致,但我认为这种行为通常更有用。无论如何,它不会再改变了,因为更多的变化只会导致更多的混乱。

mrwjdhj3

mrwjdhj34#

您可以在开始时将该tribble转换为dataframe

qu25 <- as.data.frame(mydata) %>% 
  group_by(month, day, station_number) %>% 
  arrange(desc(value)) %>% 
  slice(3) %>% 
  select(value)

相关问题