使用tidyr::separate拆分数据列时P400拆分结果异常求助
解决tidyr::separate拆分字母数字混合列的问题
你的问题出在拆分用的正则表达式上——当前的(?<=[0-9])(?=[A-Za-z])只匹配数字紧跟字母的位置,所以能正确拆分1200C,但P400是字母紧跟数字的结构,这个正则找不到对应的拆分位置,导致第二列返回<NA>。
修正后的代码
item <- c("A","B") Type <- c("P400","1200C") test_df <- data.frame(item, Type) # 修改sep参数的正则,匹配字母与数字之间的任意边界 test_df <- test_df |> tidyr::separate(Type, into = c("A", "B"), sep = "(?<=[A-Za-z])(?=[0-9])|(?<=[0-9])(?=[A-Za-z])") test_df
运行结果
item A B 1 A P 400 2 B 1200 C
这个正则表达式的逻辑是:
(?<=[A-Za-z])(?=[0-9]):匹配字母后面紧跟数字的位置|:逻辑或,同时匹配两种边界情况(?<=[0-9])(?=[A-Za-z]):匹配数字后面紧跟字母的位置
这样就能覆盖两种字母数字混合的结构,实现预期的拆分效果。
内容的提问来源于stack exchange,提问作者Bubbles
相关产品推荐
相关产品推荐

