按列分组 - 订单问题

时间:2017-07-31 07:51:41

标签: r dplyr

按列分组后,我遇到了汇总问题。我有一个如下所示的数据集:

    ID       KEY
  320249T    75
  320249T    59
  320249T    83
  320249T    78
  320249T    42
  320249T    78
  320249T    42

(数据有大约23个其他列,大约200万行)。数据已按数据排序,即特定ID的第一行是最新的,最后一行是第一行。我想保留最重复的KEY,所以我这样做(df是我的数据集):

df.freq1 <- df %>% group_by(ID, KEY) %>% summarise(count=n())

给了我结果:

      ID    KEY count
1:  320249T  42   2
2:  320249T  59   1
3:  320249T  75   1
4:  320249T  78   2
5:  320249T  83   1

如果两个(或多个键)具有相同数量的&#34;计数&#34;,我想保留最后一个键,在这个特定情况下,它将是78(如果你看到第一个表)。但是,当我这样做时:

df.freq1[,.SD[which.max(count),],by=ID]

我得到了

      ID    KEY count
1:  320249T  42     2

我猜它因为分组结果的顺序而选择42,所以,我该怎么做才能使分组结果保留原始数据帧的时间顺序?

1 个答案:

答案 0 :(得分:2)

不是最优雅,但这个dplyr解决方案有效,并且避免了缓慢安排:

df %>%   
  mutate(order = row_number()) %>% 
  group_by(ID, KEY) %>% 
  summarise(n = n(),
            order = first(order)) %>% 
  filter(n == max(n)) %>% 
  slice(which.min(order))
Source: local data frame [1 x 4]
Groups: ID [1]

       ID   KEY     n order
    <chr> <int> <int> <int>
1 320249T    78     2     4