Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 使用as.POSIXlt进行日期操作_R_Date_Posixlt - Fatal编程技术网

R 使用as.POSIXlt进行日期操作

R 使用as.POSIXlt进行日期操作,r,date,posixlt,R,Date,Posixlt,我正在设法找到离今天最近的星期日 我将今天定义为: dt <- as.Date("2014-06-04") 我可以通过以下方式找到下一个星期天: dt - as.POSIXlt(dt)$wday [1] "2014-06-01" dt + as.POSIXlt(dt)$wday [1] "2014-06-07" 不确定以下各项不起作用的原因: ifelse(as.POSIXlt(dt)$wday <= 3, dt - as.POSIXlt(dt)$wday,

我正在设法找到离今天最近的星期日

我将今天定义为:

dt <- as.Date("2014-06-04")
我可以通过以下方式找到下一个星期天:

dt - as.POSIXlt(dt)$wday
[1] "2014-06-01"
dt + as.POSIXlt(dt)$wday
[1] "2014-06-07"
不确定以下各项不起作用的原因:

ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday)
[1] 16222
有什么想法吗?

似乎ifelse返回了一个向量,并从日期中删除了POSIX类。为什么不呢

dt + ifelse(as.POSIXlt(dt)$wday <= 3, -1, 1) * as.POSIXlt(dt)$wday
相反。

ifelse似乎返回一个向量,并从日期中删除POSIX类。为什么不呢

dt + ifelse(as.POSIXlt(dt)$wday <= 3, -1, 1) * as.POSIXlt(dt)$wday

相反。

另一种解决方案:通过调用例如:

structure(ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday), class="Date")

另一种解决方案:通过调用恢复类属性,例如:

structure(ifelse(as.POSIXlt(dt)$wday <= 3, 
       dt - as.POSIXlt(dt)$wday, 
       dt + as.POSIXlt(dt)$wday), class="Date")
此处无需使用ifelse,经典的if/else即可完成此任务:

if(as.POSIXlt(dt)$wday <= 3) dt - as.POSIXlt(dt)$wday else dt + as.POSIXlt(dt)$wday
[1] "2014-06-01"
或者更简单:

wday <- as.POSIXlt(dt)$wday 
dt + if(wday<= 3) -wday else wday
此处无需使用ifelse,经典的if/else即可完成此任务:

if(as.POSIXlt(dt)$wday <= 3) dt - as.POSIXlt(dt)$wday else dt + as.POSIXlt(dt)$wday
[1] "2014-06-01"
或者更简单:

wday <- as.POSIXlt(dt)$wday 
dt + if(wday<= 3) -wday else wday
1.试试这个:

wday <- as.POSIXlt(dt)$wday
dt + ifelse(wday <= 3, -wday, 7-wday)
3表达这一点的另一种方式是:

dt - wday + 7 * (wday > 3)
1.试试这个:

wday <- as.POSIXlt(dt)$wday
dt + ifelse(wday <= 3, -wday, 7-wday)
3表达这一点的另一种方式是:

dt - wday + 7 * (wday > 3)

+谢谢你的努力。我已经想过了,但我的问题是理解为什么ifelse语句不起作用+谢谢你的努力。我已经想过了,但我的问题是理解为什么ifelse语句不起作用!!请注意,如果dt是Thu、Fri或Sat,则此答案和除我之外的所有答案给出的结果都是错误的。。例如,对于dt,请注意,如果dt为Thu、Fri或Sat,则此答案和除我之外的所有答案都给出了错误的结果。。例如,对于dt