我有一个类似于这个的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,只有两列:gnr
和colorcode
。 Colorcode包含此行中其他列之一中显示的颜色值。
所以我需要一个函数来检查哪个列不是NA,然后将这个颜色值分配给新的列颜色代码。
感谢您的帮助!
答案 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"))])