【问题标题】:Is there an R function like fill for filling NA's with characters as const是否有像 fill 这样的 R 函数,用于用 const 字符填充 NA
【发布时间】:2021-07-15 14:52:04
【问题描述】:

我有一个这样的 data.table:

missings_table = data.table( name = c("Jim","Paul",NA,"Sam"),
                         midterm = c(0,15,13,12),
                         final = c(0,NA,16,13));missings_table

我想做的类似于

nafill(missings_table$final,type = "const", fill = 0)

但如果我尝试

nafill(missings_table$name,type = "const", fill = "name")

我明白了

'x' argument must be numeric type, or list/data.table of numeric types

谢谢:)

【问题讨论】:

  • nafill 的手册页说“目前仅支持双精度和整数数据类型。”
  • 当您使用fill="name" 时,您是否打算将替换的数据作为常量字符串"name",或者您希望替换值以某种方式从name 列中的某些内容派生而来?
  • @r2evans 一个常量
  • 我一直认为nafill 是当你想用它前面或后面的值而不是常量替换NA 时使用的东西(尽管我认识type="const")。我认为 Uwe 的回答是 data.table 中用常量替换 NAs 的规范方式,所以请accept it

标签: r data.table na fill


【解决方案1】:

很遗憾,nafill() 函数目前不支持字符数据类型。

所以,这里有一个 方法,用于将字符列中的 NA 替换为常数值:

missings_table[is.na(name), name := "name"]
   name midterm final
1:  Jim       0     0
2: Paul      15    NA
3: name      13    16
4:  Sam      12    13

【讨论】:

  • 有 PR 将这个功能添加到 nafill
【解决方案2】:

由于你的填充类型是固定的,你可以使用tidyr::replace_na

tidyr::replace_na(missings_table, list(name='name', final = 0))
   name midterm final
1:  Jim       0     0
2: Paul      15     0
3: name      13    16
4:  Sam      12    13

【讨论】:

    【解决方案3】:

    您可以使用基本函数 is.na() 对此非常有效,并且是最简单的解决方案。

    missings_table$name[is.na(missings_table$name)] <- "name"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2016-04-15
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多