如何用for循环为R数据集按年份年龄条件设置分组A
用for循环实现指定样本分组的R语言方案
首先需要修正你提供的初始数据集代码——原代码中创建data.frame时使用==会生成逻辑值列,这是错误的,正确的赋值应该用=:
# 修正后的数据集创建代码 df1 <- data.frame(age = 1:10, year = 2004) df2 <- data.frame(age = 1:10, year = 2005) df3 <- data.frame(age = 1:10, year = 2006) df <- rbind(df1, df2, df3)
接下来用for循环实现分组需求:我们可以先把各年份对应的A组年龄范围整理成规则列表,再循环遍历每个规则,匹配数据中的对应样本并标记为"A"组。
方案一:基于已有初始分组补充
如果已经按原代码初始化了2004年的分组,只需要补充2005和2006年的规则:
# 先初始化2004年的A组,其余设为NA df <- df %>% mutate(group = case_when(age %in% 1:3 & year == 2004 ~ "A", TRUE ~ NA_character_)) # 定义需要补充的年份-年龄规则 group_rules <- list( "2005" = 2:4, "2006" = 3:5 ) # 循环更新分组 for (year_str in names(group_rules)) { target_year <- as.integer(year_str) target_ages <- group_rules[[year_str]] # 匹配条件并设置group为"A" df$group[df$year == target_year & df$age %in% target_ages] <- "A" }
方案二:统一循环处理所有年份
如果不想单独处理2004年,可以把所有年份的规则都放进列表,统一循环赋值,更简洁:
# 初始化group列为NA df$group <- NA_character_ # 定义所有年份的A组年龄规则 group_rules <- list( "2004" = 1:3, "2005" = 2:4, "2006" = 3:5 ) # 循环遍历规则,完成分组 for (year_str in names(group_rules)) { target_year <- as.integer(year_str) target_ages <- group_rules[[year_str]] df$group[df$year == target_year & df$age %in% target_ages] <- "A" }
两种方案都能实现需求,方案二更适合后续扩展新的年份规则。
内容的提问来源于stack exchange,提问作者Y.H.
相关产品推荐
相关产品推荐

