这与我之前提出的问题有关:
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")]
但我认为这个解决方案不是很快,也许有人可以提出更好的建议。