拆分R数据帧中的列

拆分R数据帧中的列,r,R,我在R数据框中有一列数据,其值如下: Blue-#105 Green-#8845 Yellow-#5454 Blue-#999 我想删除最后一个数字部分(开始于-x),以便蓝- 999→/代码>和蓝- 105×< /代码>在绘图时被认为是同一事物。如何实现这一点?使用正则表达式: > DF <- data.frame(col=c("Blue-#105", "Green-#8845", "Blue-#999")) > DF col 1 Blue-#105

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

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

我想删除最后一个数字部分(开始于-x),以便<代码>蓝- 999→/代码>和<代码>蓝- 105×< /代码>在绘图时被认为是同一事物。如何实现这一点?

使用正则表达式:

> 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蓝色-105
2绿色-#8845
3蓝色#999
>DF$col DF
上校
1蓝色
2绿色
3蓝色
> 

这里我们说,所有以
-
(注释字符
-
需要转义)开头的字符串,后面跟的是任何字符串——在正则表达式行话中是
*
:任何字符(点)重复多次(星号)——都将被空字符串替换,或者换句话说,已删除。

使用sub或gsub功能。例如,您可以执行以下操作:

newcolors <- sub("^([^-]*)-.*$", "\\1", oldcolors )

newcolors嘿,格雷格,我喜欢你的答案有多简洁,但我遇到了一个错误:意外”,“in”newdatafr@Eric:那么我认为你应该复制粘贴更好。它对我来说很好,而且你提供的错误显示的代码与格雷格在这里发布的代码不一样。FWIW my
gsub()
调用比
sub()短/更简洁
此处显示的调用。否则,它们本质上是等效的。是的,对于给定的示例数据,两个正则表达式是等效的。区别在于,德克的侧重于丢弃什么,而我的侧重于保留什么。哪一个更好取决于未来数据中可能存在的差异。您可以检查这个问题和我的答案与类似问题的链接,如您的。