R data.table:检查哪个列不是NA并获取该列的值

时间:2016-07-22 11:17:34

标签: r data.table

我有一个类似于这个的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。 Colorcode包含此行中其他列之一中显示的颜色值。 所以我需要一个函数来检查哪个列不是NA,然后将这个颜色值分配给新的列颜色代码。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我们可以使用melt转换为'long'格式。在这里,我们假设“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"))])