2015-07-03 18 views
1

У меня есть кадр данных, как это:Изменение переменных в кадре данных

Sample Protein1 X.Age 
    1  4.3  25-35 
    2  1.5  35-45 
    3  2.6  25-35 
    4  1.9  45-55 
    5  4.2  35-45 

и так далее. Дело в том, что я хотел бы изменить «35-45» и «45-55» на «35+» Это мой код

df$X.Age[df$X.Age == "35-45"] <- "35+" 

Но когда я запускаю его я получаю:

Warning message: 
In `[<-.factor`(`*tmp*`, df$X.Age == "35-45", value = c(1L, 1L, : 
    invalid factor level, NA generated 

Странно, так как я могу изменить на другие факторы, такие как пол и хад точно такой же код.

ответ

3
DF <- read.table(text = "Sample Protein1 X.Age 
    1  4.3  25-35 
    2  1.5  35-45 
    3  2.6  25-35 
    4  1.9  45-55 
    5  4.2  35-45", header = TRUE) 

#DF$X.Age[DF$X.Age == "35-45"] <- "35+" 
#warning about invalid factor levels and results in NAs 

factor определяется как переменная с конечным множеством возможных значений (его levels). Вы не можете назначить ему значения, которые не указаны в этом наборе. Обратите внимание, что функции, которые создают файл data.frame, автоматически меняют столбцы character на столбцы factor, если вы не измените настройки по умолчанию.

У вас есть два варианта. Убедитесь, что переменная имеет класс character (например, используйте настройку stringsAsFactors = FALSE), а не factor и используйте свой код. Или напрямую изменить уровни факторов:

levels(DF$X.Age)[levels(DF$X.Age) == "35-45"] <- "35+" 
#Sample Protein1 X.Age 
#1  1  4.3 25-35 
#2  2  1.5 35+ 
#3  3  2.6 25-35 
#4  4  1.9 45-55 
#5  5  4.2 35+ 
Смежные вопросы