将两个子模式上的字符串拆分为data.frame
我有一个字符向量:将两个子模式上的字符串拆分为data.frame,r,regex,string,strsplit,R,Regex,String,Strsplit,我有一个字符向量: s <- "0 / 10 %(% 1 / 11 %-% 2 / 12 %)% 3 / 13" 注: /将点分开:我想将x/y分为x-部分和y-部分 第二次拆分的%*%应放入符号的z列中,但不包括% 我尝试了各种版本的strsplit,但没有成功: trimws(unlist(strsplit(s, "[/(%*%)]"))) [1] "0" "0" "" "" "1" "1" "-" "2" "2" "" "" "3" "3" 问题: -没有被(*%)
s <- "0 / 10 %(% 1 / 11 %-% 2 / 12 %)% 3 / 13"
注:
将点分开:我想将/
分为x/y
-部分和x
-部分y
- 第二次拆分的
应放入符号的%*%
列中,但不包括z
李>%
trimws(unlist(strsplit(s, "[/(%*%)]")))
[1] "0" "0" "" "" "1" "1" "-" "2" "2" "" "" "3" "3"
问题:
没有被-
(*%)捕获,为什么
- 我有空的字符串部分,为什么
- 我不知道如何将
s存储到split
列中z
str这是很微妙的,因为strsplit(s,“%[(-)]%”
丢弃了分割模式,这对于“/”来说是可以的,但是对于捕获百分比之间的中间字符来说不是。如果你保证在正确的百分比后面有一个空格,你可以只做strsplit(s,“%”);否则,您将需要一个带有数字右前向断言的正则表达式
进行两次拆分更容易、更清晰:在“%”右侧百分比上进行第一次拆分:
s2 <- strsplit(s, '% ')[[1]]
"0 / 10 %(" "1 / 11 %-" "2 / 12 %)" "3 / 13"
这件衣服的小毛病是破破烂烂的;最后一行没有符号。
因为在您的情况下,似乎可以安全地假设只发生在行尾,最简单的错误是添加一个“%$%”行尾字符(注意尾随空格),然后稍后映射$
->NA。注意strsplit,“%[(-)”
丢弃分割模式,对于“/”来说,这是可以的,但对于捕获百分比之间的中间字符来说则不行。如果你保证在正确的百分比后面有一个空格,你可以只做strsplit(s,“%”);否则,您将需要一个带有数字右前向断言的正则表达式。进行两次拆分更容易、更清晰,在“%”右侧百分比上进行第一次拆分。
s2 <- strsplit(s, '% ')[[1]]
"0 / 10 %(" "1 / 11 %-" "2 / 12 %)" "3 / 13"
> strsplit(s2, '[%/]')
[[1]]
[1] "0 " " 10 " "("
[[2]]
[1] "1 " " 11 " "-"
[[3]]
[1] "2 " " 12 " ")"
[[4]]
[1] "3 " " 13"