我想在每行的data.table中提取第一个非缺失变量。
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 :(得分:0)
显然这会奏效:
data<-data[,non_missing_var:=function_non_missing(unlist(.SD)),by=1:nrow(data)]
可能有人更熟悉data.table评论为什么这样做,为什么我需要放入unlist。
答案 1 :(得分:0)
我建议使用apply函数。尝试
apply(data, 1, function_non_missing)
1
指的是逐行应用函数。