【问题标题】:Insert NA values in a data frame R在数据框 R 中插入 NA 值
【发布时间】: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, ] &lt;- c("D W MCMILLAN MEMORIAL HOSPITAL", "AL") 和 result_df[2, ] &lt;- c("ARKANSAS METHODIST MEDICAL CENTER", "TX")。但是话又说回来,这将进行深层复制,相反,预先定义数据帧的捕获总是更好。

标签: r dataframe na


【解决方案1】:

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

【讨论】:

  • 不确定失败的原因。请随时指出为什么这个答案是不充分的。
  • 我也为此买了一个 dv。不知道为什么它是 dved
  • 太好了!!,非常感谢!!,解决了我的问题。
【解决方案2】:

我们可以从data.table使用rbindlist

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多