【问题标题】:R data.table: check which column is not NA and get the value of this columnR data.table:检查哪一列不是NA并获取该列的值
【发布时间】:2016-07-22 11:17:34
【问题描述】:

我有一个类似于这个的data.table:

      gnr  konf_prot  konf_kath       konf_andere  konf_ohne
   1: 1136        NA  #F16913         NA           NA
   2: 1150        NA  #F16913         NA           NA
   3: 2890   #9E9AC8       NA         NA           NA
   4: 4401        NA  #FEE6CE         NA           NA
   5: 2427        NA       NA         #FD8D3C      NA

它有一个 ID 列 (gnr) 和一些包含颜色代码的列。在每一行中,只有一列有颜色值,其他的都是NA。

我想要的是一个只有两列的新 data.table:gnrcolorcode。颜色代码包含出现在该行的其他列之一中的颜色值。 所以我需要一个函数来检查哪一列不是 NA,然后将此颜色值分配给新列颜色代码。

感谢您的帮助!

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我们可以使用melt 转换为“长”格式。在这里,我们假设“gnr”为unique,并且 OP 已经提到将有一个非 NA 元素,这种方法将提供具有两列的新数据集。

    melt(setDT(dt), id.var = "gnr", na.rm = TRUE, value.name = "colorVal")[, 
                        variable:= NULL][]
    

    base R 方法将使用 max.col

    setDF(dt)
    data.frame(dt[1], ColorVal =dt[-1][cbind(1:nrow(dt), max.col(!is.na(dt[-1]), "first"))])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多