我已经使用data.table来创建一个空的数据框,但是当我向它添加观察时,所有观察结果都会被强制转换为NA。
首先,我使用“stringsAsFactors = FALSE”参数创建一个空数据框:
cards <- data.frame(Ending = character(), Owner = character(), stringsAsFactors = FALSE)
str(cards)
'data.frame': 0 obs. of 2 variables:
$ Ending: chr
$ Owner : chr
我得到一个数据框,其中包含0个观察值和两个预期的字符变量。
然后我创建观察1(不是实际代码 - 从另一个data.frame DF中提取)
newcard1 <- as.list(
c(Ending = as.character(DF[4, "Col1"]),
Owner = as.character(DF[4, "Col2"]))
)
str(newcard1)
List of 2
$ Ending: chr "1234"
$ Owner : chr "JOE BIDEN"
和观察2(不是实际代码 - 从另一个data.frame DF中提取)
newcard2 <- as.list(
c(Ending = as.character(DF[51, "Col1"]),
Owner = as.character(DF[51, "Col2"]))
)
str(newcard2)
List of 2
$ Ending: chr "5678"
$ Owner : chr "JOHN TURTURRO"
两者都是包含两个字符变量的列表,如上所示。
现在如果我绑定第一个观察作品
cards <- rbind(cards, newcard1)
str(cards)
'data.frame': 1 obs. of 2 variables:
$ Ending: Factor w/ 1 level "1234": 1
$ Owner : Factor w/ 1 level "JOE BIDEN: 1
rbind操作已将观察结果改为因子。此外,如果我尝试添加任何其他观察,rbind将不接受任何其他值作为有效级别并将值强制转换为NA:
cards <- rbind(cards, newcard2)
Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = FALSE) :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = FALSE) :
invalid factor level, NA generated
str(cards)
'data.frame': 2 obs. of 2 variables:
$ Ending: Factor w/ 1 level "1234": 1 NA
$ Owner : Factor w/ 1 level "JOE BIDEN": 1 NA
cards
Ending Owner
1 1234 JOE BIDEN
2 <NA> <NA>
我做错了什么?