Уровни переименования факторов с использованием подмножества фактора self в R - PullRequest
2 голосов
/ 21 июня 2019

У меня есть фактор выборки:

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

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

Уровни факторов можно переименовать несколькими способами (описано здесь в Поваренной книге для R).Функция 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 ]

1 голос
/ 21 июня 2019

Мы можем использовать 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
0 голосов
/ 21 июня 2019

c() не нравится по некоторым причинам. Всегда можно назначать имена после, например,

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