R语言使用separate按|及周边空格拆分列的正则语法问题
R拆分含空格竖线分隔字段的实现方案
你需要的正则分隔符为\\s*\\|\\s*,同时补充fill = "right"参数即可消除缺失值填充警告,完整实现代码如下:
library(tidyverse) # 输入数据 input <- tibble(A = c("Ae1 tt1 | Ae2 tt2", "Be1 | Be2 | Be3")) # 拆分实现 output <- input %>% separate( col = A, into = c("B","C","D"), sep = "\\s*\\|\\s*", fill = "right" )
运行后得到的output和你预期的结果完全一致:
# A tibble: 2 × 3 B C D <chr> <chr> <chr> 1 Ae1 tt1 Ae2 tt2 <NA> 2 Be1 Be2 Be3
参数说明
sep = "\\s*\\|\\s*":\\s*匹配任意数量的空白字符,\\|匹配竖线本身(竖线是正则特殊字符,需加双反斜杠转义),组合后会把竖线及两侧的所有空格统一作为分隔符处理,拆分后的字段自然不会残留多余空格fill = "right":指定行数不足3个拆分结果时,用NA填充右侧最后一列,消除默认的缺失值填充警告
扩展适配(可选)
如果不确定待拆分的列最多会拆出多少个字段,可通过如下代码动态生成列名,无需手动指定into参数:
max_col <- max(str_count(input$A, "\\|")) + 1 output <- input %>% separate( col = A, into = paste0("col_", seq_len(max_col)), sep = "\\s*\\|\\s*", fill = "right" )
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

