提问者:小点点

dplyrgroup_by汇总不一致的行数


我一直在学习关于DataCamp的教程。我有以下一行代码,当我运行它时,它会为“drows”生成不同的值

hflights %>% 
group_by(UniqueCarrier, Dest) %>% 
summarise(rows= n(), drows = n_distinct(rows))

第一次:

Source: local data frame [234 x 4]
Groups: UniqueCarrier [?]

        UniqueCarrier  Dest  rows drows
                <chr> <chr> <int> <int>
1             AirTran   ATL   211    86
2             AirTran   BKG    14     6
3              Alaska   SEA    32    18
4            American   DFW   186    74
5            American   MIA   129    57
6      American_Eagle   DFW   234   101
7      American_Eagle   LAX    74    34
8      American_Eagle   ORD   133    56
9  Atlantic_Southeast   ATL    64    28
10 Atlantic_Southeast   CVG     1     1
# ... with 224 more rows

第二次:

   Source: local data frame [234 x 4]
Groups: UniqueCarrier [?]

        UniqueCarrier  Dest  rows drows
                <chr> <chr> <int> <int>
1             AirTran   ATL   211   125
2             AirTran   BKG    14    13
3              Alaska   SEA    32    29
4            American   DFW   186   118
5            American   MIA   129    76
6      American_Eagle   DFW   234   143
7      American_Eagle   LAX    74    47
8      American_Eagle   ORD   133    85
9  Atlantic_Southeast   ATL    64    44
10 Atlantic_Southeast   CVG     1     1
# ... with 224 more rows

第三次:

Source: local data frame [234 x 4]
Groups: UniqueCarrier [?]

        UniqueCarrier  Dest  rows drows
                <chr> <chr> <int> <int>
1             AirTran   ATL   211    88
2             AirTran   BKG    14     7
3              Alaska   SEA    32    16
4            American   DFW   186    79
5            American   MIA   129    61
6      American_Eagle   DFW   234    95
7      American_Eagle   LAX    74    31
8      American_Eagle   ORD   133    67
9  Atlantic_Southeast   ATL    64    31
10 Atlantic_Southeast   CVG     1     1
# ... with 224 more rows

我的问题是为什么这个值不断变化?它在做什么?


共1个答案

匿名用户

显然这是正常的行为,请看这里。https://github.com/tidyverse/dplyr/issues/2222.

这是因为列表列中的值是通过引用进行比较的,所以n_distinct()将它们视为不同的,除非它们真的指向同一个对象:

所以df的内部存储改变了它的工作方式。哈德利在那个问题上的评论似乎是说这可能是一个bug(从不需要的行为的意义上来说),或者可能是他们需要更好地记录的预期行为。