使用gsub查找R中不相等的所有值

时间:2014-05-28 03:29:26

标签: r grep gsub

在绘制网络图之前,我试图使用gsub将Igraph顶点变量中的值更改为颜色。
问题是我的图表有3个我关心的值,还有很多其他我想要分组为"其他"并指定1种颜色。

例如,如果我的数据如下:

Name........Value  
A............1  
B............2  
C............3  
D............4  
E............5  

我的代码如下:

V(g)$color=V(g)$value #assign the "Value" attribute as the vertex color  
V(g)$color=gsub("1","red",V(g)$color) #1 will be red  
V(g)$color=gsub("2","blue",V(g)$color) #2 will be blue  
V(g)$color=gsub("3", "yellow", V(DMedge)$color) #3 is yellow  

我可以添加哪些代码来使4和5成为其他颜色(例如绿色)?非常感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

我会避免sub(这不是关于匹配模式)并执行:

my.colors <- c("red", "blue", "yellow", "green")
V(g)$color <- my.colors[match(V(g)$value, c(1, 2, 3), nomatch = 4)]

答案 1 :(得分:2)

假设在进行了初始替换之后,剩下的唯一数字是你想要成为一种统一颜色的数字,你可以使用regex匹配所有连续数字并为它们添加相同的颜色。

V(g)$color=gsub("\\d+", "green",V(g)$color)

请参阅this page了解gsub正则表达式。

答案 2 :(得分:1)

看起来这就足以满足您的目标:

x <- c("1","2","3","4")
gsub("4|5", "green", x) 
[1] "1"     "2"     "3"     "green" "green"

或者这个

 gsub("[^1-3]", "green", x) 
[1] "1"     "2"     "3"     "green" "green"

然而,正如在其他答案中指出的那样,设置查找表将数字映射到颜色并使用match确定颜色似乎更好。