繁体   English   中英

如何在R中使用子函数更改具有加号(+)的因子水平?

[英]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_recodeforcats

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM