【问题标题】:add a "flag" column to data.table which indicates that some columns contain NA in R向 data.table 添加一个“标志”列,表示某些列在 R 中包含 NA
【发布时间】:2020-07-10 21:59:02
【问题描述】:

我创建了一个示例数据集,其中包含缺少某些信息的列。这个数据集非常小,但我的真实数据包含 100 000 个项目。我想添加一个额外的列,作为指定列中缺失数据的指标。

我正在寻找一个 data.table 解决方案,它创建一个名为incomplete 的新列,即1 是列age, reported, aregion, ausage 和/或 afruitcontain NA,否则@ 987654325@是0

fruit = c("Apple", "Kiwi", "Banana", "Orange", "Blueberry", "Banana", "Orange", "Blueberry", NA, NA)
usage = c("cooking", "cooking", NA , "drinking", "medicine", NA, "drinking", "medicine", NA, "medicine")
age = c (22,34, 4, 66, NA, 18, 46, NA, 22, 77)
reported = c(200, 500, 77, 520, 303, NA, NA, NA, 44, 55)
aregion = c(NA, NA, 5, 2, 5, 7, 2, NA, 77, 33)
ausage = c("cooking", "cooking", "medicine", NA, "drinking", "medicine", NA, "drinking", "drinking", "Blueberry")
afruit = c("Apple", "Kiwi", "Banana", "Orange", "Blueberry", "Banana", "Orange", "Blueberry", "Blueberry", "Blueberry")
incomplete = c(1,1,0,1,1,1,1,1,0,0)

exdata <- cbind(fruit, usage, age, reported, aregion, ausage, afruit)
exdata <- as.data.table(data)

那么想要的结果是:

> exdata
      fruit       usage      age  reported aregion ausage      afruit      incomplete
 [1,] "Apple"     "cooking"  "22" "200"    NA      "cooking"   "Apple"     "1"       
 [2,] "Kiwi"      "cooking"  "34" "500"    NA      "cooking"   "Kiwi"      "1"       
 [3,] "Banana"    NA         "4"  "77"     "5"     "medicine"  "Banana"    "0"       
 [4,] "Orange"    "drinking" "66" "520"    "2"     NA          "Orange"    "1"       
 [5,] "Blueberry" "medicine" NA   "303"    "5"     "drinking"  "Blueberry" "1"       
 [6,] "Banana"    NA         "18" NA       "7"     "medicine"  "Banana"    "1"       
 [7,] "Orange"    "drinking" "46" NA       "2"     NA          "Orange"    "1"       
 [8,] "Blueberry" "medicine" NA   NA       NA      "drinking"  "Blueberry" "1"       
 [9,] NA          NA         "22" "44"     "77"    "drinking"  "Blueberry" "0"       
[10,] NA          "medicine" "77" "55"     "33"    "Blueberry" "Blueberry" "0" 

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    试试:

    library(data.table)
    
    exdata[, incomplete := +(rowSums(is.na(.SD)) > 0), .SDcols = setdiff(names(exdata), c('usage', 'fruit'))]
    

    输出:

            fruit    usage  age reported aregion    ausage    afruit incomplete
     1:     Apple  cooking   22      200    <NA>   cooking     Apple          1
     2:      Kiwi  cooking   34      500    <NA>   cooking      Kiwi          1
     3:    Banana     <NA>    4       77       5  medicine    Banana          0
     4:    Orange drinking   66      520       2      <NA>    Orange          1
     5: Blueberry medicine <NA>      303       5  drinking Blueberry          1
     6:    Banana     <NA>   18     <NA>       7  medicine    Banana          1
     7:    Orange drinking   46     <NA>       2      <NA>    Orange          1
     8: Blueberry medicine <NA>     <NA>    <NA>  drinking Blueberry          1
     9:      <NA>     <NA>   22       44      77  drinking Blueberry          0
    10:      <NA> medicine   77       55      33 Blueberry Blueberry          0
    

    【讨论】:

      猜你喜欢
      • 2012-10-12
      • 2017-06-22
      • 2020-08-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多