Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两个子模式上的字符串拆分为data.frame_R_Regex_String_Strsplit - Fatal编程技术网

将两个子模式上的字符串拆分为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
    列中,但不包括
    %
我尝试了各种版本的strsplit,但没有成功:

trimws(unlist(strsplit(s, "[/(%*%)]")))
[1] "0" "0" ""  ""  "1" "1" "-" "2" "2" ""  ""  "3" "3"
问题:

  • -
    没有被
    (*%)捕获,为什么
  • 我有空的字符串部分,为什么
  • 我不知道如何将
    split
    s存储到
    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"