更改数据框中的变量

时间:2015-07-03 08:27:34

标签: r

我的数据框如下:

 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

这很奇怪,因为我可以更改其他因素,如性别和hade完全相同的代码。

1 个答案:

答案 0 :(得分: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+