Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
R中正则表达式的匹配_R_Regex - Fatal编程技术网

R中正则表达式的匹配

R中正则表达式的匹配,r,regex,R,Regex,假设我有下一个数据帧 table<-data.frame(col1=c("4-p","4-p 1.0","2-p","4-p 1.6","2-p 1.0"),col2=c("4-p 1.0","2-p 1.0","1.6 2-p","4-p 1.8","1.0 2-p civic"), p_ok=c("Y","N","Y","Y","Y"), n_ok=c("N","Y","N","N","Y")) col1 col2 p_ok n_ok 4-p

假设我有下一个数据帧

table<-data.frame(col1=c("4-p","4-p 1.0","2-p","4-p 1.6","2-p 1.0"),col2=c("4-p 1.0","2-p 1.0","1.6 2-p","4-p 1.8","1.0 2-p civic"), p_ok=c("Y","N","Y","Y","Y"), n_ok=c("N","Y","N","N","Y"))

    col1          col2 p_ok n_ok
     4-p       4-p 1.0    Y    N
 4-p 1.0       2-p 1.0    N    Y
     2-p       1.6 2-p    Y    N
 4-p 1.6       4-p 1.8    Y    N
 2-p 1.0 1.0 2-p civic    Y    Y

table我们可以通过使用
sub
切换“p”子字符串和数字的顺序,然后对于没有数字的元素,将其替换为0,使用
strsplit
将字符串一分为二,并通过比较
矩阵的
列表
将其减少为逻辑
矩阵
。如果需要,我们可以用
Y/N

res <- Reduce(`==`, lapply(table[1:2], function(x) do.call(rbind, 
       strsplit(sub("^([A-z0-9-]+)\\b$", "\\1 0", 
        sub("^([0-9.]+)\\s+([0-9]+-p).*", "\\2 \\1", x)), " "))))
ifelse(res, "Y", "N")
#   [,1] [,2]
#[1,] "Y"  "N" 
#[2,] "N"  "Y" 
#[3,] "Y"  "N" 
#[4,] "Y"  "N" 
#[5,] "Y"  "Y" 

res Yes,部分是可以的,但请注意no列的分布方式始终相同,例如,第5行(n_ok是'Y'),而不是'n',因为de 1.0位于字符串的开头对不起,我更正了这个问题。