R语言中使用Group by与条件规则修改dataframe的completion字段
R语言实现分组统一修改completion字段的方案
核心逻辑:按name分组后,若组内存在任意completion=0的记录,则全组completion统一设为0,否则保留为1。
方法1:使用dplyr包(tidyverse生态常用,易读性高)
# 加载包 library(dplyr) # 计算逻辑 df_completed <- df_school %>% group_by(name) %>% mutate(completion = ifelse(any(completion == 0), 0, 1)) %>% ungroup()
说明:ifelse(any(completion == 0), 0, 1)也可以替换为as.integer(!any(completion == 0)),效果完全一致
方法2:使用Base R(无需安装第三方包)
df_completed <- df_school df_completed$completion <- ave( df_completed$completion, df_completed$name, FUN = function(x) ifelse(any(x == 0), 0, 1) )
方法3:使用data.table包(性能优先,适合大数据集)
# 加载包 library(data.table) # 转换为data.table对象并计算 setDT(df_school) df_school[, completion := ifelse(any(completion == 0), 0, 1), by = name] # 若需要转换回data.frame格式,执行下行代码 # setDF(df_school)
以上三种方法均可得到你给出的预期输出结果。
内容的提问来源于stack exchange,提问作者Faithshield
相关产品推荐
相关产品推荐

