在数据框 R 中插入 NA 值

Insert NA values in a data frame R

我想要一个空数据框,然后向其中添加行值。我创建数据框的方式如下:

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 函数需要具有相同的列名。如果您创建了具有相同列名的数据框,则可以在不使用 NA 的情况下合并这些数据框。

result_df <- rbind(result_df, data.frame(Hospital = "D W MCMILLAN MEMORIAL HOSPITAL", 
                                         state = "AL",
                                         stringsAsFactors = FALSE))

result_df <- rbind(result_df, data.frame(Hospital = "ARKANSAS METHODIST MEDICAL CENTER", 
                                         state = "TX",
                                         stringsAsFactors = FALSE)) 

这是最终输出。

print(result_df)
                           Hospital state
1    D W MCMILLAN MEMORIAL HOSPITAL    AL
2 ARKANSAS METHODIST MEDICAL CENTER    TX

我们可以使用 rbindlist 来自 data.table

library(data.table)
rbindlist(list(result_df, list("D W MCMILLAN MEMORIAL HOSPITAL", "AL")))
#                         Hospital State
#1: D W MCMILLAN MEMORIAL HOSPITAL    AL