# v0 to v1 : change made on Jan 29, 2018 # v0 to v1 improvement: column(s) of numeric and NA observations identified as numeric # v0 transpose=function(data) { data=setcolorder(dcast(melt(data, id.vars="row0"), variable~row0)[, variable:=NULL], data[, row0]) list=names(data)[sapply(names(data), function(x, data){suppressWarnings(all(!is.na(as.numeric(data[, get(x)]))))}, data)==TRUE] if(!identical(list, character(0))){data[, (list):=lapply(.SD, as.numeric), .SDcols=list]} return(data) } # v1 transpose=function(data) { data=setcolorder(dcast(melt(data, id.vars="row0"), variable~row0)[, variable:=NULL], data[, row0]) list=names(data)[sapply(names(data), function(x, data){suppressWarnings(all(!is.na(as.numeric(data[, get(x)]))|(is.na(data[, get(x)]))))}, data)==TRUE] if(!identical(list, character(0))){data[, (list):=lapply(.SD, as.numeric), .SDcols=list]} return(data) }