【发布时间】:2017-06-11 01:56:20
【问题描述】:
我想要一个空数据框,然后向其中添加行值。我创建数据框的方式如下:
result_df <- data.frame("Hospital" = character(), "State" = character(), stringsAsFactors = FALSE)
然后我添加第一行:
result_df <- rbind(result_df, list("D W MCMILLAN MEMORIAL HOSPITAL", "AL"))
作为额外信息,我向您展示以下命令的结果:
str(result_df)
'data.frame': 1 obs. of 2 variables:
$ X.D.W.MCMILLAN.MEMORIAL.HOSPITAL.: Factor w/ 1 level "D W MCMILLAN MEMORIAL HOSPITAL": 1
$ X.AL. : Factor w/ 1 level "AL": 1
然后我将下一行添加到数据框中
result_df <- rbind(result_df, list("ARKANSAS METHODIST MEDICAL CENTER", "TX"))
这就是我得到的:
Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = "ARKANSAS METHODIST MEDICAL CENTER") :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = "TX") :
invalid factor level, NA generated
当我输入 result_df 来查看数据框的内容时,结果如下:
X.D.W.MCMILLAN.MEMORIAL.HOSPITAL. X.AL.
1 D W MCMILLAN MEMORIAL HOSPITAL AL
2 <NA> <NA>
我想这可以使用 stringAsFactors = FALSE 来解决,有人知道这个问题吗?
【问题讨论】:
-
不要使用
rbind来添加行。您应该预定义data.frame的大小和使用行索引以填充它。在最坏的情况下,您可以使用索引轻松添加行,例如result_df[1, ] <- c("D W MCMILLAN MEMORIAL HOSPITAL", "AL")和result_df[2, ] <- c("ARKANSAS METHODIST MEDICAL CENTER", "TX")。但是话又说回来,这将进行深层复制,相反,预先定义数据帧的捕获总是更好。