我有一个像这样的数据框:
ID <- c('A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A' )
BRR <- c(62,57,66,53,54,50,55,65,71,53,51,50,58,54,55,57)
val1 <- c(1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3)
val2 <- c(0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2)
df <- data.frame(ID, BRR, val1, val2)
输出:
ID BRR val1 val2
1 A 62 1 0
2 A 57 1 0
3 A 66 1 0
4 A 53 1 0
5 A 54 1 0
6 A 50 1 0
7 A 55 1 0
8 A 65 2 1
9 A 71 2 1
10 A 53 2 1
11 A 51 3 2
12 A 50 3 2
13 A 58 3 2
14 A 54 3 2
15 A 55 3 2
16 A 57 3 2
我想按组(ID
、val1
、val2
)获取BRR
的最大值.在这种情况下,ID
具有相同的值。 Val2
将始终比 val1
小 1,因此我不确定是否需要此列。
所以当 val2
为 0 时,max_val_KP
将为 0。当 val2
为 1 时,我想要 的最大值val1
分组,像这样:
ID BRR val1 val2 Max_val_KP
1 A 62 1 0 0
2 A 57 1 0 0
3 A 66 1 0 0
4 A 53 1 0 0
5 A 54 1 0 0
6 A 50 1 0 0
7 A 55 1 0 0
8 A 65 2 1 66
9 A 71 2 1 66
10 A 53 2 1 66
11 A 51 3 2 71
12 A 50 3 2 71
13 A 58 3 2 71
14 A 54 3 2 71
15 A 55 3 2 71
16 A 57 3 2 71
我试过:
require(dplyr)
df <- df %>%
filter(va1 == val2) %>%
group_by(ID, val2) %>%
mutate(max_val_KP = max(BRR))
我也试过:
require(dplyr)
df <- df %>%
group_by(ID, val1 == val2) %>%
mutate(max_val_KP = max(BRR))
最佳答案
你可以这样做:
library(dplyr)
library(tidyr)
df %>%
group_by(ID) %>%
mutate(max_val_KP = replace_na(ave(BRR, val1, FUN = max)[match(val2, val1)], 0)) %>%
ungroup()
# A tibble: 16 × 5
ID BRR val1 val2 max_val_KP
<chr> <dbl> <dbl> <dbl> <dbl>
1 A 62 1 0 0
2 A 57 1 0 0
3 A 66 1 0 0
4 A 53 1 0 0
5 A 54 1 0 0
6 A 50 1 0 0
7 A 55 1 0 0
8 A 65 2 1 66
9 A 71 2 1 66
10 A 53 2 1 66
11 A 51 3 2 71
12 A 50 3 2 71
13 A 58 3 2 71
14 A 54 3 2 71
15 A 55 3 2 71
16 A 57 3 2 71
关于在 R 中使用多个条件按组返回最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74621388/