簡體   English   中英

使用 R 中因子 self 的子集重命名因子水平

[英]Renaming factor levels using a subset of the factor self in R

我有一個樣本因子:

x <- factor(c("alpha", "beta", "gamma", "alpha", "beta"))

# Output
> x
[1] alpha beta  gamma alpha beta 
Levels: alpha beta gamma

因子的水平可以通過多種方式(描述改名這里的食譜為R)。 plyr庫的plyr revalue()函數是一個選項:

library(plyr)
revalue(x, c("beta" = "two", "gamma"="three"))

# Output   
> revalue(x, c("beta" = "two", "gamma"="three"))
[1] alpha two   three alpha two  
Levels: alpha two three

問題

我想在函數中使用revalue()函數,所以我認為可以在revalue()函數中使用因子的子集:

revalue(x, c(x[2] = "two", x[3]="three"))

這會產生以下錯誤:

Error: unexpected '=' in "revalue(x, c(paste(x[2]) ="

接下來,我嘗試了paste()函數:

revalue(x, c(paste(x[2]) = "two", x[3]="three"))

可悲的是,同樣的錯誤。

這里發生了什么? 由於paste(x[2])等於"beta" ,我認為它應該有效嗎?

我們可以使用setNames

plyr::revalue(x, setNames(c("two", "three"), x[2:3]))
#[1] alpha two   three alpha two  
#Levels: alpha two three

注意

setNames
function (object = nm, nm) 
{
    names(object) <- nm
    object
}

或者另一個選項是fct_recode

library(forcats)
fct_recode(x, two = as.character(x[2]), three = as.character(x[3]))
#[1] alpha two   three alpha two  
 #Levels: alpha two three

c()出於某種原因不喜歡它。 總是可以在例如之后分配名稱

y <- c("two", "three")
names(y) <- x[2:3]
revalue(x, y) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM