gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:09:15 26 4
gpt4 key购买 nike

我在 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() 恰好返回一个字符向量。

关于r - 如何使用 R 中的子函数更改具有加号 (+) 的因子水平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com