如何在R语言strsplit中用‘或’逻辑分割空格与斜杠?
解决R语言strsplit同时按空格和斜杠分割的问题
当然可以在strsplit里直接使用“或”逻辑同时分割空格和斜杠,完全不需要变通方法——核心就是利用正则表达式的|运算符来实现多分隔符匹配。
问题分析与修正方案
你的原函数里,strsplit只指定了空白字符作为分隔符,现在只需要把分隔符的正则表达式改成"\\s+|/",就能同时匹配一个或多个空白字符以及斜杠。另外注意原函数里的一个小问题:你在sapply的匿名函数里用了strsplit(string, "\\s+")[[x]],这会每次对整个string向量做分割,而不是单个元素,需要改成strsplit(x, pattern)[[1]]才正确。
修改后的函数
str_to_df <- function(string){ # 用\\s+匹配一个或多个空格,|表示或,/匹配斜杠 split_results <- sapply(string, function(x) strsplit(x, "\\s+|/")[[1]]) # 转置并转为数据框 t(split_results) %>% as.data.frame(stringsAsFactors = FALSE) }
测试示例
我们用几个混合了空格和斜杠的字符串测试一下:
test_strings <- c("cat dog/rabbit", "horse/goat sheep", "ant bee/cow duck") str_to_df(test_strings)
输出结果:
V1 V2 V3 V4 cat cat dog rabbit <NA> horse horse goat sheep <NA> ant ant bee cow duck
正则表达式说明
\\s+:匹配一个或多个空白字符(包括空格、制表符等,如果你只想匹配空格可以改成" +|/")|:正则中的“或”运算符,分隔两个匹配规则/:直接匹配斜杠本身(斜杠不是正则元字符,不需要转义)
这样就完美实现了你要的“同时按空格和斜杠分割”的需求,不需要额外的变通步骤。
内容的提问来源于stack exchange,提问作者Eric Fail
相关产品推荐
相关产品推荐

