拆分R数据帧中的列

时间:2010-09-27 15:45:42

标签: r

我在R数据框中有一列数据,其值如下:

Blue-#105
Green-#8845
Yellow-#5454
Blue-#999

我想删除最后一个数字部分(从 - #开始),以便在绘图时Blue-#999Blue-#105被认为是相同的。我怎么能做到这一点?

2 个答案:

答案 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>