与R中的正则表达式匹配

时间:2017-04-28 19:38:54

标签: 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       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

我必须实现一种方法来确定列是否相似(p_ok和n_ok)。

规则是,如果数字加上&#34; -p&#34;从第1列起等于col2,p_ok是&#39; Y&#39;其他&#39; N&#39;如果两列中的另一个数字(1.0,1.6,1.8)相同,则n_ok为&#39; Y&#39;。请注意,字符串中的顺序可以更改(请查看第5行)。

请记住,真实数据包含多种数据变体(2-p,3-p,4-p,5-p)和(1.0,2.0 ......),所以正则表达式会有必要确定列是否相似(p_ok和n_ok)。

规则是,如果数字加上&#34; -p&#34;从第1列起等于col2,p_ok是&#39; Y&#39;其他&#39; N&#39;如果两列中的另一个数字(1.0,1.6,1.8)相同,则n_ok为&#39; Y&#39;。 请记住,真实数据包含多个数据变量(2-p,3-p,4-p,5-p)和(1.0,2.0 ......),因此需要使用正则表达式。这个练习。

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我们可以通过使用#切换'p'子串和数字的顺序来实现这一点,然后对于没有数字的元素将其替换为0,使用{{1}将字符串拆分为两个通过比较sub的{​​{1}},将strsplit更改为逻辑Reduce。如果需要,我们可以用matrix

替换逻辑矩阵
list