【发布时间】:2016-07-12 10:10:32
【问题描述】:
我在 data.table 中使用 lapply 时遇到问题。这里有两个例子:
library(data.table)
library(lubridate)
test <- function(x)
{
if(is.na(x)) return(NA)
if(x=="") return(NA)
if(substr(x,3,3)=="/") return(as_date(x,"%d/%m/%Y"))
return(2)
}
x1<-data.table(v1=c("","07/06/2016","",NA), v2=c("2004-06-18","","2004-06-18","2004-06-18"))
x1[,lapply(.SD,test)]
x2<-data.table(v1=c("2004-06-19","2004-06-18","",NA),v2=c("2004-06-18","","2004-06-18","2004-06-18"))
x2[,lapply(.SD,test)]
在第一个示例中,lapply 之后的第一列是NA,但我想获取的是NA, 2016-06-07, NA, NA。
在第二个例子中,第一列的最后两行是错误的,因为每行包含 2 但我认为应该包含NA。
我不明白 R 在这里如何看待NA。为了得到我想要的,我错过了什么?
【问题讨论】:
-
上面的
.SD是什么? -
这允许我们在所有列上应用一个函数。我们还可以放置另一个参数“.SDcols = c(...)”以将函数应用于特定列。我认为这仅用于数据表。
标签: r data.table lapply