gpt4 book ai didi

在 R 中使用多个条件按组返回最大值

转载 作者:行者123 更新时间:2023-12-02 15:44:46 25 4
gpt4 key购买 nike

我有一个像这样的数据框:

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

我想按组(IDval1val2)获取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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com