提问者:小点点

dplyrgroup_by在摘要后保留额外的列


我对此完全不知所措——我正在玩tsibble中的“行人”数据集。我想获得每个月/年的总数。我首先添加了一个month_year列,然后用sum总结数据,如下所示:

library("tidyverse")
library("tsibble")

df1 <- pedestrian
df1$month_year <- format(as.Date(df1$Date), "%Y-%m")

count_all <- df1 %>%  
  dplyr::group_by(month_year) %>% 
  dplyr::summarise(total = sum(Count))

count_all的摘要如下:

  month_year          Date_Time                         total      
 Length:17542       Min.   :2015-01-01 00:00:00.0   Min.   :   12  
 Class :character   1st Qu.:2015-07-02 17:15:00.0   1st Qu.:  349  
 Mode  :character   Median :2016-01-01 11:30:00.0   Median : 2090  
                    Mean   :2016-01-01 11:44:40.2   Mean   : 2593  
                    3rd Qu.:2016-07-02 04:45:00.0   3rd Qu.: 4455  
                    Max.   :2016-12-31 23:00:00.0   Max.   :15990

为什么要保留Date_Time?如何防止它影响摘要(例如防止它给我17,542行而不是预期的24行)。如果我像这样删除摘要之前的列:

df1$Date_Time <- NULL

然后它工作正常,结果摘要如下所示:

  month_year            total        
 Length:24          Min.   :1148276  
 Class :character   1st Qu.:1756898  
 Mode  :character   Median :1927154  
                    Mean   :1895161  
                    3rd Qu.:2066043  
                    Max.   :2393675  

这个解决方案很好,但是我想知道问题的原因是什么,这样我就可以在将来避免它(这次很容易发现问题,但可能并不总是那么直截了当)。

提前感谢您的帮助!


共1个答案

匿名用户

数据集行人是一个以传感器为键,Date_Time为索引的tsibble。您对tsibble执行的任何操作都将保留索引。您可以通过转换回tibble来删除索引。

pedestrian %>%
  as_tibble() %>% 
  mutate(ym = yearmonth(Date)) %>% 
  dplyr::group_by(ym) %>% 
  dplyr::summarise(total = sum(Count))