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