【发布时间】:2021-04-22 02:27:56
【问题描述】:
我试图在管道中使用条件语句但失败了。
数据如下:
group = rep(letters[1:3], each = 3)
status = c(T,T,T, T,T,F, F,F,F)
value = c(1:9)
df = data.frame(group = group, status = status, value = value)
> df
group status value
1 a TRUE 1
2 a TRUE 2
3 a TRUE 3
4 b TRUE 4
5 b TRUE 5
6 b FALSE 6
7 c FALSE 7
8 c FALSE 8
9 c FALSE 9
我想获取每个group 中最大value 的行,条件是如果每个group 中的任何status 有TRUE,那么filter(status == T) %>% slice_max(value) 或slice_max(value) 否则。
我试过的是这样的:
# way 1
df %>%
group_by(group) %>%
if(any(status) == T) {
filter(status == T) %>% slice_max(value)
} else {
slice_max(value)
}
# way 2
df %>%
group_by(group) %>%
when(any(status) == T,
filter(status == T) %>% slice_max(value),
slice_max(value))
我期望的输出应该是这样的:
> expected_df
group status value
1 a TRUE 3
2 b TRUE 5
3 c FALSE 9
任何帮助将不胜感激!
【问题讨论】:
标签: r if-statement dplyr tidyverse