2016-10-26 48 views
0

我想爲每行在我的data.table中提取第一個非缺失變量。在data.table中按行查找第一個非缺失變量R

function_non_missing<-function(x){ 
    x<-x[!is.na(x)] 
    #Then apply some other transformations such as 
    #x<-x[x!=""] 
    #x<-x[x!="some random thing"] 
    if (length(x)>0){ 
    x[1] 
    } else{ 
    NA 
    } 
} 

現在我只想將這個函數逐行應用。我搜索了以前的答案,然後試着喜歡的東西:

data<-data[,non_missing_var:=function_non_missing(.SD),by=1:nrow(data)] 

我也試過同樣的想法的其他排列,但似乎沒有任何工作。更一般地說,有人可能會指向某些教程,以瞭解使用.SDcols中指定的參數列逐行應用data.table想法的最有效方法(特別是如何使用Map和Reduce)。在實踐中,我經常想要做的是類似於:

data<-data[,my_new_var:=random_function(.SD),.SDcols=c("var_1","var_2","var_3"),by=1:nrow(data)] 

和random_function正在向量上運行。

回答

0

顯然,這將工作:

data<-data[,non_missing_var:=function_non_missing(unlist(.SD)),by=1:nrow(data)] 

可能有人更熟悉data.table評論爲什麼這個工作,爲什麼我需要把選擇不公開。

0

我建議使用apply函數。嘗試

apply(data, 1, function_non_missing) 

1指的是按行應用函數。

+0

我知道這會工作,但我想要一個data.table解決方案。 – Vitalijs

相關問題