根据R中的条件根据最大值填充列

问题描述 投票:0回答:1

我需要根据每组的最大值填充一个新列。

所以我有

A B  C
1 1  0
1 9  0
2 5  0
2 10 0
2 15 0
3 1  0 
3 2  0
4 5  0
4 6  0

我需要为每个A组的$ B中的每个最大值填充$ C和1

所以:

A B  C
1 1  0
1 9  1
2 5  0
2 10 0
2 15 1
3 1  0 
3 2  1
4 5  0
4 6  1

感谢帮助

r max grouping fill
1个回答
2
投票

我们可以使用基数R ave来匹配每组中的最大值

df$C <- +(with(df, B == ave(B, A, FUN = max)))

df
#  A  B C
#1 1  1 0
#2 1  9 1
#3 2  5 0
#4 2 10 0
#5 2 15 1
#6 3  1 0
#7 3  2 1
#8 4  5 0
#9 4  6 1

dplyr也一样

library(dplyr)

df %>%
  group_by(A) %>%
  mutate(C = +(B == max(B)))

我们也可以将它与最大值的索引相匹配

df$C <- with(df, ave(B, A, FUN = function(x) seq_along(x) == which.max(x)))

df %>%
  group_by(A) %>%
  mutate(C = +(row_number() == which.max(B)))
© www.soinside.com 2019 - 2024. All rights reserved.