【问题标题】:how to filter by group keys on an already grouped dataframe (grouped_df)如何在已分组的数据帧(grouped_df)上按组键过滤
【发布时间】:2020-04-09 06:24:29
【问题描述】:

您知道如何在已分组的数据框 (grouped_df) 上按组键(或索引)进行过滤吗?

例如:

df <- tibble(id1 = sample(1:10, 100, replace = TRUE),
             id2 = sample(1:10, 100, replace = TRUE),
             value = runif(100, 0, 1)) %>%
  arrange(id1, id2)

如果我想获取最后5组对应的行:

df %>%
  mutate(grp_id=paste0(id1, "_", id2)) %>%
  filter(grp_id %in% tail(unique(grp_id), 5)) %>%
  group_by(id1, id2)

df %>%
  group_by(id1, id2) %>%
  mutate(grp_id = group_indices()) %>% 
  ungroup() %>% 
  filter(grp_id %in% tail(unique(grp_id), 5)) %>%
  group_by(id1, id2)

你知道分组后的过滤器怎么写吗?

df %>%
  group_by(id1, id2) %>%
  xxxxxx ?

【问题讨论】:

  • 我想知道数据框分组后是否有一些方法可以编写过滤器。真正的数据帧将从已经分组的磁盘中恢复(读取),它有数百万行。因此,不必解组和重新组合会更快。

标签: r group-by tidyverse


【解决方案1】:

如果我们需要避免 group_byungroup 重复,请创建“grp_id”,然后通过提取整个列来使用 %in% (.$grp_id)

library(dplyr)
df %>%
  group_by(id1, id2) %>%
  mutate(grp_id = group_indices()) %>%
  filter(grp_id %in% tail(unique(.$grp_id), 5))
# A tibble: 12 x 4
# Groups:   id1, id2 [5]
#     id1   id2  value grp_id
#   <int> <int>  <dbl>  <int>
# 1    10     3 0.527      59
# 2    10     5 0.264      60
# 3    10     5 0.569      60
# 4    10     5 0.157      60
# 5    10     6 0.0504     61
# 6    10     6 0.703      61
# 7    10     6 0.109      61
# 8    10     7 0.896      62
# 9    10     9 0.785      63
#10    10     9 0.775      63
#11    10     9 0.940      63
#12    10     9 0.450      63

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2020-07-31
    • 2017-08-29
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多