yearmon缺失值为R中的字符
我在R中有一个大的数据集,在data.table中,其中一些列包含yyyy-mm格式的日期。其中一些缺失值,记为“ND”。yearmon缺失值为R中的字符
我正在寻找一个全面的解决方案,在data.table的“if”部分的这些列的“zoo”包中使用as.yearmon(x),而不会产生以下错误: “as .yearmon.character(x):yearmon变量只能有一种格式“
as.yearmon(x)在只包含yyyy-mm格式的日期的列上工作正常,并且它对包含列没有日期,只有文本,如“ND”,在这种情况下,它只给出NA。当这些问题发生组合时,就会出现这样的问题,即存在具有日期和其他文本(例如“ND”)的列,此时发生上述错误。
解决这个问题的一个方法是创建新的列,其中“ND”被NA所代替,但是由于这是一个非常大的数据集,似乎需要反复大量的代码。如果原来的“x”没有改变,我也会更喜欢它,因为它也用于其他许多目的。
下面是一些代码,以澄清:
x <- c("2016-06","2016-07","ND")
DT <- data.table(x)
DT[as.yearmon(DT$x) > as.yearmon("2016-01") , y := 1]
在某种意义上,我想as.yearmon(X),得到输出:
DT$y
1 1 NA
我们可以创建一个逻辑索引与grep
在i
并检查'x'的yearmon
是否大于'2016-01'的值,转换为integer
,并将赋值(:=
)作为新列'y'。
DT[!grepl("[[:alpha:]]+", x), y := as.integer(as.yearmon(x) > as.yearmon("2016-01")) ]
DT$y
#[1] 1 1 NA
或者像@Frank在评论中提到的,我们可以用%like%
DT[!x %like% "ND", y := as.integer(as.yearmon(x) > as.yearmon("2016-01")) ]
另一种解决方案是预先改造 “的ND” 为NA。例如:
x <- as.yearmon(gsub("ND", NA, c("2016-06","2016-07","ND"), fixed=TRUE))
DT <- data.table(x)
DT[as.yearmon(x) > as.yearmon("2016-01") , y := 1]
或内data.table
x <- c("2016-06","2016-07","ND")
DT <- data.table(x)
DT[, .(x=as.yearmon(gsub("ND", NA, c("2016-06","2016-07","ND"), fixed=TRUE)))
][x > as.yearmon("2016-01"), y := 1][]
两者均返回
DT
x y
1: Jun 2016 1
2: Jul 2016 1
3: <NA> NA
喜欢你的答案 – nik
我认为,(1)你应该使用,而不是试图与合作的r NA格式你自己的'is.na(x) Frank