[英]How can I use a sub function in R to change a factor level that has a plus (+ ) symbol?
我在使用R中的sub()和gsub()函数重命名/更改R中的因子级别时遇到了麻烦。但是我不确定为什么它不起作用。
场景:我有一些调查数据,其中一些因素会截断高价值的水平。 例如,有关您上周工作多少小时的问题停止在“ 89 +小时”。 我想将此级别更改为“ 89”,以便可以将其数字地用于其他活动。 我知道几种执行此操作的方法-因此,我不需要其他各种级别更改选项。
我按照以下说明在该站点上使用sub()和gsub()函数: http : //www.cookbook-r.com/Manipulating_data/Renaming_levels_of_a_factor/这个概念很简单明了。
以下是初始示例数据:
x <- factor(c("a", "b", "c", "d"))
x
[1] a b c d
Levels: a b c d
我可以将d级更改为89级
x <- factor(c("a", "b", "c", "d"))
levels(x) <- sub("d", "89", levels(x))
x
[1] a b c 89
Levels: a b c 89
当我在关卡中引入空格时,我很好:
x <- factor(c("a", "b", "c", "d"))
levels(x) <- sub("d", "89 hrs", levels(x))
x
[1] a b c 89 hrs
Levels: a b c 89 hrs
当我在新的因子级别中引入+符号时,我很好:
x <- factor(c("a", "b", "c", "d"))
levels(x) <- sub("d", "89+ hrs", levels(x))
x
[1] a b c 89+ hrs
Levels: a b c 89+ hrs
但是,当我尝试将带有+符号的级别重命名/更改为没有它的级别时,我陷入了困境:
x <- factor(c("a", "b", "c", "89+ hrs"))
x
[1] a b c 89+ hrs
Levels:89+ hrs a b c
levels(x) <- sub("89+ hrs", "d", levels(x))
x
[1] a b c 89+ hrs
Levels: 89+ hrs a b c
当我包含来自链接站点的特定字符串示例时,存在相同的问题:
levels(x) <- sub("^89+ hrs$", "d", levels(x))
x
[1] a b c 89+ hrs
Levels: 89+ hrs a b c
如果我也使用gsub()而不是sub(),则会遇到相同的问题。
如果我用*而不是+,也会发生此问题,但如果它是点(。)而不是+,则可以使用。 因此,我认为这与某些特殊字符有关,而与其他字符无关。
有什么想法为什么不能与+符号一起使用以及如何使用这些功能? 提前致谢!
sub()
函数默认情况下使用正则表达式,而+
是正则表达式的特殊字符。 如果要匹配文字加号,请使用
levels(x) <- sub("89\\+ hrs", "d", levels(x))
要么
levels(x) <- sub("89+ hrs", "d", levels(x), fixed=TRUE)
没有什么是因素真正独特的。 这就是sub()
与任何字符向量一起工作的方式,而levels()
恰好返回一个字符向量。
一个方便的选择是fct_recode
从forcats
library(forcats)
fct_recode(x, d = "89+ hrs")
#[1] a b c d
#Levels: d a b c
x <- factor(c("a", "b", "c", "89+ hrs"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.