我想过滤在一个变量的最大值处另一个变量等于特定值的组。
我有这样的数据:
library(tidyverse)
df1 <- data.frame(grp = rep(letters[1:2],each=5),
day = 1:5,
value = c(0,5,7,1,1,5,8,5,3,0)) %>%
group_by(grp)
grp day value
1 a 1 0
2 a 2 5
3 a 3 7
4 a 4 1
5 a 5 1
6 b 1 5
7 b 2 8
8 b 3 5
9 b 4 3
10 b 5 0
我想过滤最大(天)值等于 1 的组。
所以输出看起来像这样:
grp day value
1 a 1 0
2 a 2 5
3 a 3 7
4 a 4 1
5 a 5 1
欢迎使用 Data.table 或 dplyr 解决方案。谢谢!
最佳答案
因为它已经分组,只需应用 filter
来检查与日期最大值 (which.max(day)
) 对应的“值”是否为 1
library(dplyr)
df1 %>%
filter(value[which.max(day)] ==1)
# A tibble: 5 x 3
# Groups: grp [1]
# grp day value
# <fct> <int> <dbl>
#1 a 1 0
#2 a 2 5
#3 a 3 7
#4 a 4 1
#5 a 5 1
或者有两个条件并用any
包裹
df1 %>%
filter(any(value ==1 & day == max(day)))
关于r - 过滤组,其中一个变量的最大值,另一个变量等于特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60675454/