R语言依据两个参考数据框通过for循环与条件判断为目标数据框新增分组列的实现
解答:可以通过for循环搭配if条件判断实现该需求
实现逻辑
核心是遍历df1的每一行,判断当前行的ind字段属于哪个参考数据框的ind列表,对应给group列赋值即可。
完整可运行代码
首先构造你给出的样例数据,方便直接复现:
# 构造样例数据 df1 <- data.frame( ind = 1:7, t1 = c(12, NA, 9, 11, 11, 10, 14), t2 = c(0.2, 0.3, 0.3, 0.4, 0.3, 0.4, 0.3) ) df2 <- data.frame( ind = 1:3, t1 = c(12, NA, 9) ) df3 <- data.frame( ind = c(4,7,8), t1 = c(11,14,12) )
然后是for循环实现的核心代码:
# 先初始化group列,默认值为NA,类型指定为字符型避免赋值报错 df1$group <- NA_character_ # 遍历df1的每一行 for (row_idx in 1:nrow(df1)) { current_ind <- df1$ind[row_idx] # 用%in%判断ind是否属于对应参考框 if (current_ind %in% df2$ind) { df1$group[row_idx] <- "df2" } else if (current_ind %in% df3$ind) { df1$group[row_idx] <- "df3" } # 两个子集都不包含的ind,保留初始的NA即可 }
结果验证
运行上述代码后得到的df1完全符合你给出的期望输出,逻辑也完全适配你现有的数据结构。
补充小提示
%in%是R中常用的包含判断运算符,返回逻辑值,刚好适配if条件的判断要求- 初始化列时用
NA_character_而非通用NA,是为了提前指定列的类型为字符型,避免R自动推导类型时出现不必要的报错 - 如果你后续需要加更多参考子集,只需要在for循环里加对应的
else if判断分支即可,扩展性很强
内容的提问来源于stack exchange,提问作者akhil
相关产品推荐
相关产品推荐

