在data.table R中按行挑出第一个非缺失变量

时间:2016-10-26 11:23:42

标签: r data.table

我想在每行的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正在向量上运行。

2 个答案:

答案 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指的是逐行应用函数。