使用:
na.omit(DT[, lapply(.SD, unlist), a][, c := as.POSIXct(c, origin="1970-01-01")])
得到:
a b c d 1: 1 q 2016-01-09 12:17:24 1 2: 1 q 2016-01-09 12:17:24 1 3: 2 w 2016-01-09 12:17:25 20 4: 2 w 2016-01-09 12:17:25 20 5: 2 w 2016-01-09 12:17:25 20
如果a
列中的值对于每一行都不是唯一的,则可以使用:
na.omit(DT[, lapply(.SD, unlist), by=1:nrow(DT)][, c := as.POSIXct(c, origin="1970-01-01")])
一个基准测试:
> microbenchmark(dtUngroup(DT)[], jaap()) Unit: milliseconds expr min lq mean median uq max neval cld dtUngroup(DT)[] 3.935677 4.005596 4.189208 4.066196 4.227372 6.750338 100 b jaap() 1.977175 2.039830 2.094536 2.074314 2.132525 2.309848 100 a