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

标签 r dplyr

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

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/

相关文章:

r - 如何在R中绘制时间序列数据,根据因子数据改变背景?

R中mtext的相对位置

r - 遍历 df,grep,然后拆分

r - 使用要传递的函数列表和函数参数列表创建新函数

r - 接下来 "specific"观察向后进位(NOCB)

r - 如何调整 tidymodels 配方参数?

r - 使用 r 对每行进行条件计数

r - dplyr:在联接期间仅要添加1个y列,而不是所有y列

r - listcolumns 和 multidplyr

r - 将 data.frame 值更改为 %