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