相关疑难解决方法(0)

dplyr:根据聚合函数结果过滤行

我有一个表格列表(金额,年和月),我想过滤与完整年份相对应的行.即我想省略下面给出的示例数据帧的最后4行,参考2015,并获得其余的60.是否可以使用单个dplyr命令执行此操作?

我试过这个:

df %>%
    group_by(year) %>%
    tally() %>%
    filter (n==12) %>%
    ungroup() 
Run Code Online (Sandbox Code Playgroud)

但我想ungroup会做出与我想要的不同的事情.是否可以使用单个dplyr命令执行此操作?

df <- structure(list(amount = c(16365, 31850, 32230, 34177.75, 27900, 
29650, 28846, 27300, 37115.31, 34130.38, 39676.1, 47244.44, 3500, 
25425.48, 22628.43, 30822.86, 30100, 41567.13, 25400, 23125, 
40073.75, 16505.82, 17770, 38406.03, 1528.25, 23475.77, 29869.69, 
17020, 19270, 13085.47, 10607.48, 7800, 15220, 15260, 17580, 
25094.66, 3908.74, 8150, 25055.89, 19690.65, 12445.4, 10347.39, 
7645.39, 49300, 8690, 13660, 16510, 34457.08, 522.68, 10202, 
18900, 25027.1, 24956.42, 23259, 32743, 37226, 32697, 32258, 
31336.67, 36135.81, 4389.26, 12450, 46220.43, …
Run Code Online (Sandbox Code Playgroud)

r filter aggregate-functions dplyr

2
推荐指数
1
解决办法
499
查看次数

通过在另一列中出现多个值来过滤组

类似于这个问题,但增加了皱纹。我只想过滤在组的任何行的特定列中具有两个(或全部几个)值的行组。

例如,假设我有这个数据框:

df <- data.frame(Group=LETTERS[c(1,1,1,2,2,2,3,3,3,3)], Value=c(5, 1:4, 1:4, 5))
Run Code Online (Sandbox Code Playgroud)

我想要那些字母,其中任何字母都有对应值为 4 的行和对应值为 5 的行,所以:

  Group Value
  <fct> <dbl>
1 C         2
2 C         3
3 C         4
4 C         5
Run Code Online (Sandbox Code Playgroud)

我能做到这一点与一对any内部调用filter是这样的:

df %>% 
  group_by(Group) %>% 
  filter(any(Value == 4),
         any(Value == 5))
Run Code Online (Sandbox Code Playgroud)

有没有办法在一行中进行过滤器调用?像:(注意这不起作用all_of不是真正的功能)

df %>% 
  group_by(Group) %>% 
  filter(all_of(Value == 4 & Value == 5))
Run Code Online (Sandbox Code Playgroud)

r dplyr

2
推荐指数
1
解决办法
649
查看次数

标签 统计

dplyr ×2

r ×2

aggregate-functions ×1

filter ×1