转置data.table,应用一个函数,然后将结果放回data.table

时间:2017-02-04 21:35:46

标签: r data.table transpose

这与我之前提出的问题有关:

Pick out first non missing element by row

在那个例子中,我有很多行操作要做。也许有人可以建议如何在data.table中转置一堆变量然后将函数应用于它们然后将其取回;

我试过这样的事情:

library(data.table)
n <- 1e5
# insert set.seed here
data <-data.table(x=sample(c(round(rnorm(1),2),"FIELD_NOT_FOUND"),n,replace=TRUE),
                 y=sample(c(round(rnorm(1),2),"FIELD_NOT_FOUND"),n,replace=TRUE),
                 z=sample(c(round(rnorm(1),2),"FIELD_NOT_FOUND"),n,replace=TRUE))

function_select <- function(x){
  paste(x[gsub("&|FIELD_NOT_FOUND","",x)!=""],collapse="####")
}

我想:

                x               y               z   my_new_var
1: FIELD_NOT_FOUND FIELD_NOT_FOUND             1.1          1.1
2: FIELD_NOT_FOUND FIELD_NOT_FOUND             1.1          1.1
3:            1.34 FIELD_NOT_FOUND FIELD_NOT_FOUND         1.34
4: FIELD_NOT_FOUND FIELD_NOT_FOUND             1.1          1.1
5:            1.34            0.67 FIELD_NOT_FOUND 1.34####0.67
6: FIELD_NOT_FOUND            0.67             1.1  0.67####1.1

我有以下解决方案:

data<-data[,my_new_var:=lapply(transpose(.SD),function_select),.SDcols=c("x","y","z")]

但我认为这个解决方案不是很快,也许有人可以提出更好的建议。

0 个答案:

没有答案