我的数据框如下:
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完全相同的代码。
答案 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+