mom*_*822 3 r posixct data.table
我正在尝试构建一个函数来将NAs 的行插入到data.table中。我使用rbindlist这种方式来完成它,这里x是一个data.table:
rbindlist(
list(
x,
as.list(rep(NA, ncol(x)))
)
)
Run Code Online (Sandbox Code Playgroud)
我遇到一个问题,即POSIXct列不能与NA值绑定,如下所示:
x <- data.table(
a=c(1,2),
t=c(Sys.time(), Sys.time()+100)
)
rbindlist(
list(
x,
as.list(rep(NA, ncol(x)))
)
)
Run Code Online (Sandbox Code Playgroud)
这对我来说导致以下错误:
Error in rbindlist(list(x, as.list(rep(NA, ncol(x))))) :
Class attributes at column 2 of input list at position 2 does not match with column 2 of input list at position 1. Coercion of objects of class 'factor' alone is handled internally by rbind/rbindlist at the moment.
Run Code Online (Sandbox Code Playgroud)
因此,它不能够结合NA与提供的I POSIXct列x$t。
问题:如何使用-type列data.table将所有NA值的单行绑定到?data.tablePOSIXct
我尝试了以下操作,导致相同的错误:
rbindlist(
list(
x,
as.list(c(NA, as.POSIXct(NA)))
)
)
Run Code Online (Sandbox Code Playgroud)
感兴趣:在原始文件上调用以下内容 data.table
x[2, t:=NA]
x[2, a:=NA]
Run Code Online (Sandbox Code Playgroud)
返回值:
a t
1: 1 2019-04-04 12:38:57
2: NA <NA>
Run Code Online (Sandbox Code Playgroud)
你可以做
library(data.table)
x <- data.table(
a=c(1,2),
t=c(Sys.time(), Sys.time()+100)
)
x[c(1:.N, NA)]
# a t
# 1: 1 2019-04-04 13:01:34
# 2: 2 2019-04-04 13:03:14
# 3: NA <NA>
# or
rbind(x, x[NA])
Run Code Online (Sandbox Code Playgroud)
在基础R中,您将使用NA_integer_后者,但是为方便起见,data.table以相同的方式对待NA。您可以看到特殊待遇,例如,使用x[(NA)]。记录在vignette("datatable-faq"):
2.17 data.frame和data.table之间的较小语法差异是什么
[...]
DT[NA]返回1行的NA,但DF[NA]返回的整个副本DF含有NA贯穿。该符号在R中NA键入logical,因此由回收[.data.frame。用户的意图可能是DF[NA_integer_]。[.data.table为了方便,自动转移到此可能的意图。