我有以下数据帧结构列表:
str(mylist)
List of 2
$ L1 :'data.frame': 12471 obs. of 3 variables:
...$ colA : Date[1:12471], format: "2006-10-10" "2010-06-21" ...
...$ colB : int [1:12471], 62 42 55 12 78 ...
...$ colC : Factor w/ 3 levels "type1","type2","type3",..: 1 2 3 2 2 ...
我想用新系数type1
替换type2
或type4
。
我试过了:
mylist <- lapply(mylist, transform, colC =
replace(colC, colC == 'type1','type4'))
Warning message:
1: In `[<-.factor`(`*tmp*`, list, value = "type4") :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, list, value = "type4") :
invalid factor level, NA generated
我不想用stringAsFactor=F
读取我的初始数据,但我尝试使用以下内容在我的初始数据集中添加type4
(在拆分成数据帧列表之前):
levels(mydf$colC) <- c(levels(mydf$colC), "type4")
但是在尝试替换时我仍然遇到同样的错误。
如何判断替换type4
是否被视为一个因素?
答案 0 :(得分:0)
您可以尝试使用levels
选项续订您的因素。
如,
status <- factor(status, order=TRUE, levels=c("1", "3", "2",...))
c("1", "3", "2",...)
是您的type4
。
答案 1 :(得分:0)
正如您所说,关键是要添加新的因子级别。
## Test data:
mydf <- data.frame(colC = factor(c("type1", "type2", "type3", "type2", "type2")))
mylist <- list(mydf, mydf)
您的数据有三个因素级别:
> str(mylist)
List of 2
$ :'data.frame': 5 obs. of 1 variable:
..$ colC: Factor w/ 3 levels "type1","type2",..: 1 2 3 2 2
$ :'data.frame': 5 obs. of 1 variable:
..$ colC: Factor w/ 3 levels "type1","type2",..: 1 2 3 2 2
现在添加第四个因子级别,然后您的replace
命令应该起作用:
## Change levels:
for (ii in seq(along = mylist)) levels(mylist[[ii]]$colC) <-
c(levels(mylist[[ii]]$colC), "type4")
## Replace level:
mylist <- lapply(mylist, transform, colC = replace(colC,
colC == 'type1','type4'))
新数据有四个因素级别:
> str(mylist)
List of 2
$ :'data.frame': 5 obs. of 1 variable:
..$ colC: Factor w/ 4 levels "type1","type2",..: 4 2 3 2 2
$ :'data.frame': 5 obs. of 1 variable:
..$ colC: Factor w/ 4 levels "type1","type2",..: 4 2 3 2 2