假设我有下一个数据框。
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 ......),因此需要使用正则表达式。这个练习。
任何人都可以帮我吗?
答案 0 :(得分:1)
我们可以通过使用#
切换'p'子串和数字的顺序来实现这一点,然后对于没有数字的元素将其替换为0,使用{{1}将字符串拆分为两个通过比较sub
的{{1}},将strsplit
更改为逻辑Reduce
。如果需要,我们可以用matrix
list