如何新增列标记个体是否达到≤150磅的体重阈值?
解决方案
我们可以通过分组判断实现需求:按Person_id分组,检查该组内是否存在体重≤150的记录,再将判断结果映射到组内所有行。
方法1:Base R 原生实现
# 加载原始数据 df <- structure(list(Person_id = c("A", "A", "A", "A", "A", "B", "B", "B"), Weight = c(170L, 164L, 160L, 150L, 149L, 250L, 225L, 230L )), class = "data.frame", row.names = c(NA, -8L)) # 按个体分组判断是否达标,再匹配到原数据的每一行 df$Condition_met <- ifelse( df$Person_id %in% names(which(tapply(df$Weight, df$Person_id, function(x) any(x <= 150)))), "Yes", "No" )
方法2:dplyr 包实现(更直观)
library(dplyr) df <- df %>% group_by(Person_id) %>% # 组内只要有一条记录达标,整组标记为Yes mutate(Condition_met = ifelse(any(Weight <= 150), "Yes", "No")) %>% ungroup()
验证结果
执行上述代码后,输出数据与期望一致:
dput(df) # 输出内容: structure(list(Person_id = c("A", "A", "A", "A", "A", "B", "B", "B"), Weight = c(170L, 164L, 160L, 150L, 149L, 250L, 225L, 230L ), Condition_met = c("Yes", "Yes", "Yes", "Yes", "Yes", "No", "No", "No")), class = "data.frame", row.names = c(NA, -8L))
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

