R 红枣有花边和花边
我导入了一个包含许多日期的CSV文件,并使用as.Date函数转换日期。但是,当我使用mapply函数查找两个日期中较早的日期时,我要么得到一个带有日期的列表,要么得到一个数字向量。我怎样才能得到带日期的向量R 红枣有花边和花边,r,R,我导入了一个包含许多日期的CSV文件,并使用as.Date函数转换日期。但是,当我使用mapply函数查找两个日期中较早的日期时,我要么得到一个带有日期的列表,要么得到一个数字向量。我怎样才能得到带日期的向量 POP.Start.final <- mapply(min, combinedOM$Cons.Start.Date.y, combinedOM$OS.Start.Date.y,
POP.Start.final <- mapply(min, combinedOM$Cons.Start.Date.y,
combinedOM$OS.Start.Date.y,
MoreArgs = list(na.rm=T),SIMPLIFY=T)
POP.Start.final不确定这是否是最好的方式,但是as.Date
函数的原点是默认日期格式的1970年1月1日
或1970-01-01
因此(用编造的数据替换您的数据),这将起作用:
> one <- as.Date("2012-01-01")
> two <- as.Date("2012-03-13")
>
> POP.Start.final <- as.Date(
mapply(min,
one,
two,
MoreArgs=list(na.rm=T)
),
origin="1970-01-01"
)
> str(POP.Start.final)
Date[1:1], format: "2012-01-01"
>一二
>POP.Start.final str(POP.Start.final)
日期[1:1],格式:“2012-01-01”
在这种特殊情况下,我相信pmin
起到了关键作用:
POP.Start.final <- pmin(combinedOM$Cons.Start.Date.y,
combinedOM$OS.Start.Date.y,
na.rm=TRUE)
一些可复制的代码:
a <- as.Date(c("2012-01-11","2012-06-30","2012-04-18"))
b <- as.Date(c("2013-04-21","2012-03-22","2012-05-01"))
pmin(a,b)
#[1] "2012-01-11" "2012-03-22" "2012-04-18"
do.call(c,mapply(min,a,b,MoreArgs=list(na.rm=TRUE),SIMPLIFY=FALSE))
#[1] "2012-01-11" "2012-03-22" "2012-04-18"
oops。你的答案是第一个,但看起来比需要的复杂。我会删除我的,不用担心。我试图在一个漂亮的基函数不可用的情况下讨论基函数,因此我们的答案可以是互补的。你对日期为什么转换为数字的解释有点不正确SIMPLIFY=TRUE
调用simplify2array
,它将其参数转换为向量或矩阵,是.vector(Sys.Date())
是FALSE
。它与“最简单的类型”无关。@JoshuaUlrich编辑。这更有意义吗?@BlueMagister:是的;不能在for循环中使用日期也是同样的问题:日期不是严格意义上的向量。
a <- as.Date(c("2012-01-11","2012-06-30","2012-04-18"))
b <- as.Date(c("2013-04-21","2012-03-22","2012-05-01"))
pmin(a,b)
#[1] "2012-01-11" "2012-03-22" "2012-04-18"
do.call(c,mapply(min,a,b,MoreArgs=list(na.rm=TRUE),SIMPLIFY=FALSE))
#[1] "2012-01-11" "2012-03-22" "2012-04-18"