R语言实现含emphysema/chronic bronchitis的指定行重复拆分方案
R数据处理:拆分指定行并填充对应字段值
前置说明
假设你的原始数据框命名为df,第一列列名为col1,第二列列名为col2,如果实际列名不同,替换代码中对应的列名即可。如果需要输出中文的字段值,只需将代码中对应的英文字符串替换为:第一列肺气肿、慢性支气管炎,第二列肺气肿、慢性支气管炎即可。
tidyverse 实现方案(代码更简洁)
# 加载依赖包 library(dplyr) library(tidyr) df_result <- df %>% # 标记需要拆分的目标行 mutate(to_split = ifelse(col1 == "emphysema/chronic bronchitis", 1, 0)) %>% # 目标行拆分为2行,生成序号区分拆分后的两条记录 uncount(weights = ifelse(to_split == 1, 2, 1), .id = "split_id") %>% # 按拆分序号填充指定的字段值 mutate( col1 = case_when( to_split == 0 ~ col1, split_id == 1 ~ "emphysema", split_id == 2 ~ "chronic bronchitis" ), col2 = case_when( to_split == 0 ~ col2, split_id == 1 ~ "Emphysema", split_id == 2 ~ "Chronic Bronchitis" ) ) %>% # 删除临时生成的辅助列 select(-to_split, -split_id)
基础R实现方案(无需安装第三方包)
# 定位所有需要拆分的行索引 split_idx <- which(df$col1 == "emphysema/chronic bronchitis") res_list <- list() for (i in seq(nrow(df))) { if (i %in% split_idx) { # 生成拆分后的第一行 row1 <- df[i, ] row1$col1 <- "emphysema" row1$col2 <- "Emphysema" # 生成拆分后的第二行 row2 <- df[i, ] row2$col1 <- "chronic bronchitis" row2$col2 <- "Chronic Bronchitis" res_list[[length(res_list) + 1]] <- row1 res_list[[length(res_list) + 1]] <- row2 } else { # 非目标行直接保留 res_list[[length(res_list) + 1]] <- df[i, ] } } # 合并列表为最终数据框 df_result <- do.call(rbind, res_list)
效果验证
运行后即可得到预期输出:原有的emphysema/chronic bronchitis行会被拆分为两行,对应列填充指定值,其余行完全保留不变。
内容的提问来源于stack exchange,提问作者Nivi
相关产品推荐
相关产品推荐

