【发布时间】:2020-01-27 15:37:21
【问题描述】:
我不知道如何在 tidyverse 中为组编写复杂的过滤条件。考虑下面的示例数据框:
df <- tibble(
a = c(1,1,1,2,2,2,2,3),
b = c(1,2,3,1,4,50,5,3),
c = c("PIZZA", "HAM", NA, "COKE", "LOBSTER", "LOBSTER", NA, NA),
)
我想a作为我的分组变量,然后选择b中记录最大的记录,使得c中的条目不是NA。
期望的输出:
tibble(
a = c(1, 2, 3),
b = c(2, 50, 3),
c = c("HAM", "LOBSTER", NA)
)
我当然可以
df %>% group_by(a) %>% filter(b == max(b))
但是我不满足列c 标准。一些并发症:
- 组间记录数不一致。
- 如果组中所有记录的c记录为
NA,则选择NA最大的b记录。
【问题讨论】:
-
为什么不只过滤去除 c 的 NA 值,然后过滤最大 b?另外,
=用于赋值,==用于比较 -
@camille 正是我的想法(太快了!),像
df %>% filter(!is.na(c)) %>% group_by(a) %>% filter(b == max(b))这样的东西似乎可读且简单。 -
@camille 抱歉,已澄清问题。一个组可能都是 NA,如果是这样,我仍然想要该组的记录。
-
那会是什么记录,NA?
-
@camille 是的,已编辑示例。