Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 红枣有花边和花边_R - Fatal编程技术网

R 红枣有花边和花边

R 红枣有花边和花边,r,R,我导入了一个包含许多日期的CSV文件,并使用as.Date函数转换日期。但是,当我使用mapply函数查找两个日期中较早的日期时,我要么得到一个带有日期的列表,要么得到一个数字向量。我怎样才能得到带日期的向量 POP.Start.final <- mapply(min, combinedOM$Cons.Start.Date.y, combinedOM$OS.Start.Date.y,

我导入了一个包含许多日期的CSV文件,并使用as.Date函数转换日期。但是,当我使用mapply函数查找两个日期中较早的日期时,我要么得到一个带有日期的列表,要么得到一个数字向量。我怎样才能得到带日期的向量

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"