【问题标题】:Subset top entries based on two criteria in R基于 R 中的两个标准的子集顶部条目
【发布时间】:2020-07-20 17:07:14
【问题描述】:

所以我有一个类似这样的数据框...

status occupation
1      A
1      A
1      B
0      C
0      A
1      B
0      B
0      A
1      A
0      D
0      D
0      D
0      D

我浓缩得到计数如下:

counts <- df %>%
   group_by(status, occupation) %>%
   summarize(count = n()) %>%
   group_by(occupation) %>%
   mutate(pct = percent(count/sum(count))) 

这给了我:

status   occupation  count   pct
1         A          3       60%
1         B          2       66%
0         A          2       40%
0         B          1       33%
0         C          1       100%
0         D          4       100%

所以我想创建这个精确数据框的子集,其中包含最高计数的职业。所以让我们说排名最高的两个职业。

但这与状态无关。

期望的最终结果:

status   occupation  count   pct
1         A          3       60%
0         A          2       40%
0         D          4       100%

请注意,该子集是总数最高的职业,与状态无关。所以我需要 2 个计数最高的职业的一个子集,然后新的子集包含细分。

【问题讨论】:

  • mutate(...)这个%&gt;% top_n(3, count)之后添加?
  • 需要取消分组但仍然不起作用,请参阅@Matt

标签: r dplyr subset


【解决方案1】:

您可以添加:

counts <- df %>%
  group_by(status, occupation) %>%
  summarize(count = n()) %>%
  group_by(occupation) %>%
  mutate(pct = percent(count/sum(count)),
         occ_count = sum(count)) %>%
  ungroup() %>%
  slice_max(., order_by = occ_count, n = 3) %>% 
  select(-occ_count)

【讨论】:

  • 没有工作/甚至没有减少到三个条目
  • 你在count == 2 处有一个平局,所以你应该期待 4 个条目。
  • 这也不完全奏效。必须克服领带的困境。无论状态如何,我都需要获得总计数较高的职业。
  • 所以职业 A 和 D 是最高计数总数,无论状态如何,所以我需要在 subtngtng 之后保留他们的状态细分
  • @JohnThomas 我更新了帖子 - 这应该可以得到你想要的。
猜你喜欢
  • 2019-09-21
  • 2013-11-02
  • 1970-01-01
  • 2019-10-22
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2019-06-01
相关资源
最近更新 更多