如何在R中按ID的天数条件创建新分类变量并保留原有变量
R语言实现方法
方案1:tidyverse实现(推荐入门用户使用,语法直观)
如果还未安装tidyverse包,先运行安装命令:install.packages("tidyverse")
加载包后执行处理代码:
library(tidyverse) # 替换df为你自己的数据集名称,ID、天数替换为对应列的实际名称 df_result <- df %>% group_by(ID) %>% mutate( 新分类 = ifelse(mean(天数 >= 90, na.rm = TRUE) >= 0.5, "A", "B") ) %>% ungroup()
代码逻辑说明:
- 按ID分组后,对每个ID的所有记录计算「天数>=90」的占比(逻辑值求均值等价于统计符合条件的占比)
- 占比≥50%则新分类赋值为A,否则为B
mutate仅新增列,原数据集的所有变量都会完整保留na.rm = TRUE用于自动忽略天数列的缺失值,若无缺失可以删除该参数
方案2:Base R实现(无需安装额外包)
不需要安装第三方包,直接用R自带函数处理:
# 先统计每个ID的符合条件占比 id_stat <- aggregate(天数 ~ ID, data = df, FUN = function(x) mean(x >= 90, na.rm = TRUE)) # 匹配占比到原数据集,新增分类列 df$新分类 <- ifelse(id_stat$天数[match(df$ID, id_stat$ID)] >= 0.5, "A", "B")
验证建议
处理完成后可以运行View(df_result)或者head(df_result, 20)查看结果是否符合预期。
内容的提问来源于stack exchange,提问作者user16597745
相关产品推荐
相关产品推荐

