我有一个抽样因子:
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"
,所以我认为它应该起作用吗?
答案 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)