R语言如何将data.frame的IV列按逗号拆分行且排除括号内逗号
R实现忽略括号内逗号的列拆分
核心思路
- 采用零宽负向先行断言的正则匹配仅不在括号内的英文逗号作为拆分分隔符,正则规则为
,(?![^()]*\)) - 拆分后逐元素去除前后空白、过滤末尾空值,再展开为独立行
完整实现代码
tidyverse 版本(推荐,代码简洁易读)
# 加载依赖包 library(dplyr) library(stringr) library(tidyr) # 导入示例数据 df <- structure(list(Article.Title = "Random title", Sample = "Sample information", IV = "Union voice, HRM practices (participation, teams, incentives, development, recruitment), implict contracts, Crisis impact, dominant individual or family owner, no dominant individual or family owner, market growth, no market growth,", Moderator = NA_character_, Mediator = NA_character_, DV = "Performance"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame")) # 数据处理 df_result <- df %>% # 按不在括号内的逗号拆分IV列为列表 mutate(IV = str_split(IV, ",(?![^()]*\\))")) %>% # 列表展开为独立行 unnest(IV) %>% # 去除拆分后内容前后的空白字符 mutate(IV = str_trim(IV)) %>% # 过滤原字符串末尾逗号产生的空值 filter(IV != "")
base R 版本(无需安装第三方包)
# 导入示例数据 df <- structure(list(Article.Title = "Random title", Sample = "Sample information", IV = "Union voice, HRM practices (participation, teams, incentives, development, recruitment), implict contracts, Crisis impact, dominant individual or family owner, no dominant individual or family owner, market growth, no market growth,", Moderator = NA_character_, Mediator = NA_character_, DV = "Performance"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame")) # 数据处理 # 按规则拆分IV列,perl=TRUE启用PCRE正则支持 splits <- strsplit(df$IV, ",(?![^()]*\\))", perl = TRUE)[[1]] # 去除每个拆分结果前后的空白 splits <- trimws(splits) # 过滤空值 splits <- splits[splits != ""] # 复制原数据行并替换IV列 df_result <- df[rep(1, length(splits)), ] df_result$IV <- splits
运行上述任意版本代码得到的结果与预期输出完全匹配。
内容的提问来源于stack exchange,提问作者flxflks
相关产品推荐
相关产品推荐

