用dplyr实现Excel锁定首值求和及分组取首值的R代码
用dplyr处理分组年龄数据的两个需求解决方案
先构造一组符合场景的示例数据(模拟AGE列存在错误值的情况):
library(dplyr) # 示例数据 df <- tibble( ID = c(1,1,1,2,2,3,3,3,3), AGE = c(25, NA, "error", 30, NA, 40, "invalid", NA, 40), # 包含错误值和NA AGE3 = c(2, 3, 5, 1, 4, 2, 6, 3, 1) )
需求1:按ID分组后,AGE4列取每组AGE的第一个值
直接通过group_by()分组,结合first()函数提取每组的第一个AGE值,广播到组内所有行:
df <- df %>% group_by(ID) %>% mutate(AGE4 = first(AGE)) %>% ungroup()
注:如果每组第一个AGE值是字符串错误值,AGE4会保留该错误值;如果需要过滤无效值取第一个有效数值,可以改用first(na.omit(as.numeric(AGE)))(需根据实际错误类型调整)。
需求2:AGE4 = 每组AGE的第一个值 + 对应行AGE3的值
同样先分组,提取每组第一个AGE值(先转为数值,忽略错误值),再与AGE3相加:
df <- df %>% group_by(ID) %>% mutate( # 提取每组第一个有效的AGE数值(跳过错误值和NA) first_valid_age = first(na.omit(as.numeric(AGE))), AGE4 = first_valid_age + AGE3 ) %>% ungroup()
这里先把AGE转为数值,用na.omit()过滤错误值(错误值转数值会变成NA),再取第一个有效数值,避免原始AGE的错误影响计算结果。如果你的错误值不是字符串而是其他类型,可根据实际情况调整as.numeric()后的处理逻辑。
内容的提问来源于stack exchange,提问作者SFKR
相关产品推荐
相关产品推荐

