使用 R 中的 dplyr 根据最大值删除 ID
Remove ID's based on their max value with dpylr in R
我有一个看起来像这样的数据框
value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5)
time <- c(0,0,0,0,1,1,1,1)
ID <- c(1,2,3,4,1,2,3,4)
test <- data.frame(value, time, ID)
value time ID
1 0.00 0 1
2 0.10 0 2
3 0.20 0 3
4 0.40 0 4
5 0.00 1 1
6 0.05 1 2
7 0.05 1 3
8 0.50 1 4
我想删除所有从未显示过高于 0.10 的值的 ID
我的新 data.frame 应该是这样的
value time ID
3 0.20 0 3
4 0.40 0 4
7 0.05 1 3
8 0.50 1 4
非常感谢任何帮助
我们可以使用分组操作 any
library(dplyr)
test %>%
group_by(ID) %>%
filter(any(value > 0.1)) %>%
ungroup
-输出
# A tibble: 4 x 3
# value time ID
# <dbl> <dbl> <dbl>
#1 0.2 0 3
#2 0.4 0 4
#3 0.05 1 3
#4 0.5 1 4
在基础 R 中,您可以使用 subset
+ ave
删除那些 all
值小于 0.1 的 ID
。
subset(test, !ave(value <= 0.1, ID, FUN = all))
# value time ID
#3 0.20 0 3
#4 0.40 0 4
#7 0.05 1 3
#8 0.50 1 4
和 data.table
:
library(data.table)
setDT(test)[, .SD[!all(value <= 0.1)], ID]
我有一个看起来像这样的数据框
value <- c(0,0.1,0.2,0.4,0,0.05,0.05,0.5)
time <- c(0,0,0,0,1,1,1,1)
ID <- c(1,2,3,4,1,2,3,4)
test <- data.frame(value, time, ID)
value time ID
1 0.00 0 1
2 0.10 0 2
3 0.20 0 3
4 0.40 0 4
5 0.00 1 1
6 0.05 1 2
7 0.05 1 3
8 0.50 1 4
我想删除所有从未显示过高于 0.10 的值的 ID
我的新 data.frame 应该是这样的
value time ID
3 0.20 0 3
4 0.40 0 4
7 0.05 1 3
8 0.50 1 4
非常感谢任何帮助
我们可以使用分组操作 any
library(dplyr)
test %>%
group_by(ID) %>%
filter(any(value > 0.1)) %>%
ungroup
-输出
# A tibble: 4 x 3
# value time ID
# <dbl> <dbl> <dbl>
#1 0.2 0 3
#2 0.4 0 4
#3 0.05 1 3
#4 0.5 1 4
在基础 R 中,您可以使用 subset
+ ave
删除那些 all
值小于 0.1 的 ID
。
subset(test, !ave(value <= 0.1, ID, FUN = all))
# value time ID
#3 0.20 0 3
#4 0.40 0 4
#7 0.05 1 3
#8 0.50 1 4
和 data.table
:
library(data.table)
setDT(test)[, .SD[!all(value <= 0.1)], ID]