如何用tidyr的separate函数按反斜杠分割数据列?
解决tidyr::separate按反斜杠分割列的问题
问题出在反斜杠的转义处理上:反斜杠在R字符串和正则表达式中都是特殊字符,需要双重转义才能匹配到实际的反斜杠分隔符。
修正后的代码
library(tidyr) library(dplyr) df1 <- structure(list(Parent.objectId = 1:2, Attachment.path = c("photos_attachments\\photos_image-20220602-192146.jpg", "photos_attachments\\photos_image-20220602-191635.jpg")), row.names = 1:2, class = "data.frame") df2 <- df1 %>% separate(Attachment.path, c("a", "b", "c"), sep = "\\\\", remove = FALSE, extra = "drop", fill = "right")
关键说明
- 你之前用的
sep="\\"会被R解析为单个反斜杠传递给正则引擎,但正则里单个反斜杠是无效的转义字符,无法匹配字符串中的实际反斜杠。 - 要匹配一个实际的反斜杠,需要在R字符串中写
\\\\:其中前两个\\是R字符串的转义,代表一个实际的\;后两个\\是正则的转义,最终让正则引擎识别为要匹配的单个反斜杠分隔符。
运行结果
执行后df2会按反斜杠成功分割出列:
> df2 Parent.objectId Attachment.path a b c 1 1 photos_attachments\photos_image-20220602-192146.jpg photos_attachments photos_image-20220602-192146.jpg <NA> 2 2 photos_attachments\photos_image-20220602-191635.jpg photos_attachments photos_image-20220602-191635.jpg <NA>
内容的提问来源于stack exchange,提问作者cherrytree
相关产品推荐
相关产品推荐

