我在R数据框中有一列数据,其值如下:
Blue-#105
Green-#8845
Yellow-#5454
Blue-#999
我想删除最后一个数字部分(从 - #开始),以便在绘图时Blue-#999
和Blue-#105
被认为是相同的。我怎么能做到这一点?
答案 0 :(得分:7)
使用正则表达式:
> DF <- data.frame(col=c("Blue-#105", "Green-#8845", "Blue-#999"))
> DF
col
1 Blue-#105
2 Green-#8845
3 Blue-#999
> DF$col <- gsub("-\\#.*", "", DF$col)
> DF
col
1 Blue
2 Green
3 Blue
>
这里我们说所有字符串都以-#
开头(评论字符#
需要转义),然后是任何 --- {{1在正则表达式术语中:任何重复多次的char(点)(星号)---将被空字符串替换,换句话说,被删除。
答案 1 :(得分:3)
使用sub或gsub函数。对于您的示例,您可以执行以下操作:
newcolors <- sub("^([^-]*)-.*$", "\\1", oldcolors )
这假设颜色在矢量'oldcolors'中并将结果放入新颜色中。模式从字符串的开头开始(^)然后匹配0个或更多不是破折号的字符([^ - ] ),其周围的parens表示保存匹配的内容。然后它匹配一个破折号,后跟另外的字符(。),直到字符串($)结束,然后匹配的部分(整个字符串)被替换为parens(颜色)中匹配的任何内容。 / p>