r - lubridate :: interval() 在 for 循环中返回一次数值
问题描述
我有上周工作的代码,本周不工作。我正在使用lubridate::interval()
,它对于 a 之外的以下数据非常有效for loop
,但是一旦我将它放在 a 中for loop
,它就会返回数值而不是间隔。
# sample code
sunset <- as.POSIXct(c("2019-11-05 19:12:17", "2019-11-06 19:13:04", "2019-11-07 19:13:51"),
tz = "Pacific/Norfolk")
sunrise <- as.POSIXct(c("2019-11-06 05:53:04", "2019-11-07 05:52:23", "2019-11-08 05:51:43"),
tz = "Pacific/Norfolk")
# sample data frame
ds <- data.frame( "sunset" = sunset,
"sunrise" = sunrise)
interval(start = ds$sunset[1], # check the interval function is working
end = ds$sunrise[1])
返回:
[1] 2019-11-05 19:12:17 +12--2019-11-06 05:53:04 +12
但在 for 循环内:
for (i in seq_along(ds$sunset)) {
ds$interval[i] <- interval(start = ds$sunset[i],
end = ds$sunrise[i])
}
它返回:
> ds
sunset sunrise interval
1 2019-11-05 19:12:17 2019-11-06 05:53:04 38447
2 2019-11-06 19:13:04 2019-11-07 05:52:23 38359
3 2019-11-07 19:13:51 2019-11-08 05:51:43 38272
我已经尝试将interval()
部分包装进去,as.interval()
但它只是再次返回了数值。我很感激这方面的任何帮助。谢谢 :)
解决方案
您遇到的问题是您需要预先初始化ds
as class的列interval
:
library(lubridate)
ds$interval <- rep(interval(as.POSIXct(NA,tz = "Pacific/Norfolk"),
as.POSIXct(NA,tz = "Pacific/Norfolk")),
3)
for (i in seq_along(ds$sunset)) {
ds$interval[i] <- interval(start = ds$sunset[i],
end = ds$sunrise[i])
}
ds
# sunset sunrise interval
#1 2019-11-05 19:12:17 2019-11-06 05:53:04 2019-11-05 07:12:17 UTC--2019-11-05 17:53:04 UTC
#2 2019-11-06 19:13:04 2019-11-07 05:52:23 2019-11-06 07:13:04 UTC--2019-11-06 17:52:23 UTC
#3 2019-11-07 19:13:51 2019-11-08 05:51:43 2019-11-07 07:13:51 UTC--2019-11-07 17:51:43 UTC
推荐阅读
- linux - 如何修复 ld:找不到 kernel.bin:没有这样的文件或目录
- java - 返回已创建的片段
- amazon-web-services - 使用 ALB 创建 ElasticBeanstalk 应用程序时覆盖 HealthCheckPort
- java - Spring bean 未创建为单例
- ios - swift - 当方向为水平方向时,如何以不同的方式放置表格单元格
- javascript - 确保等到所有 Ajax 调用都完成后再显示结果
- java - Java - Apache POI - 仅在 MS Excel 中的单元格日期格式错误
- regex - Pandas 列在特定单词后选择行正则表达式数字
- html - 阻止除 .htaccess 之外的所有搜索查询
- javascript - 反应 UseState 流