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

时间:2019-06-21 15:32:45

标签: r plyr

我有一个抽样因子:

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

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

可以通过多种方式重命名因子级别(在R的Cookbook中对here进行了描述)。 revalue()库的plyr函数是一个选项:

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",所以我认为它应该起作用吗?

2 个答案:

答案 0 :(得分:1)

我们可以使用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

答案 1 :(得分:0)

c()由于某种原因不喜欢它。总是可以在例如

之后分配名称
y <- c("two", "three")
names(y) <- x[2:3]
revalue(x, y)