簡體   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