2015-10-06 2 views
0

Я пытаюсь установить уровни нескольких столбцов факторов следующим значениям «Нет» и «Да». Я использую следующий код, но он не работаетРедактировать уровни сразу нескольких столбцов в R

binaryCol <- c(5:10, 15:19, 21:26, 30:32) # position of the columns for which I want to change the factors 
for(i in binaryCol) {levels(df[,i])<- c("No","Yes")} 

Любая помощь будет оценена

+0

Теперь, когда я смотрю на это, ваш код работает просто отлично. Что «не работает»? – thelatemail

ответ

1

Ваш код прекрасно работает на простом примере:

binaryCol <- c(1,3) 
df <- data.frame(Var1=factor(1:0), Var2=1:2, Var3=factor(0:1)) 
# Var1 Var2 Var3 
#1 1 1 0 
#2 0 2 1 

for(i in binaryCol) { levels(df[,i]) <- c("No","Yes") } 
df 
# Var1 Var2 Var3 
#1 Yes 1 No 
#2 No 2 Yes 

В качестве альтернативы, используйте lapply применять функция для ваших выбранных столбцов factor:

df[binaryCol] <- lapply(df[binaryCol], function(x) {levels(x) <- c("No","Yes"); x }) 

df 
# Var1 Var2 Var3 
#1 Yes 1 No 
#2 No 2 Yes 

Или, если вы хотите быть хитрым:

df[binaryCol] <- lapply(df[binaryCol], `levels<-`, c("No","Yes")) 
+0

Как ни странно, мой оригинальный код НЕ меняет исходные уровни и после запуска, если я запустил str (df), у меня все еще есть 0 и 1 как уровни. Но следующий код, который вы предоставили, отлично работает, поэтому спасибо! df [binaryCol] <- lapply (df [binaryCol], function (x) {levels (x) <-c ("Нет", "Да"); x}) – remif

Смежные вопросы