2016-07-22 73 views
1

我有data.table類似於此的該列的值:- [R data.table:檢查哪些列不爲NA,並獲得

 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,然後將這個顏色值賦給新的列顏色代碼。

感謝您的幫助!

回答

2

我們可以使用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"))]) 
+1

冷靜,這個作品真的很好,非常感謝! – Mario