r - 将负数转换为 Date 或 POSIXct 对象
问题描述
我一直打算将一些 4 到 2 位负数(表示 BCE 日期)转换为 Date 对象。在此之前,我想将年、月和日列合并为一个列。如果你们对我如何使用 lubridate 做到这一点有任何想法,我将不胜感激。
> NOAA_data %>% slice(10:30)
# A tibble: 21 x 39
`Search Paramet~ Year Mo Dy Hr Mn Sec Tsu Vol `Location Name` Latitude
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
1 NA -1050 NA NA NA NA 0 NA NA JORDAN: SW: ~ 29.6
2 NA -759 NA NA NA NA 0 NA NA ISRAEL: JERUS~ 33
3 NA -590 NA NA NA NA NA 7 NA LEBANON: SUR ~ 33.3
4 NA -550 NA NA NA NA NA NA NA GREECE: MOUNT~ 37
5 NA -525 NA NA NA NA NA 8 NA LEBANON: SUR ~ 33.6
6 NA -480 9 29 NA NA NA 3469 NA GREECE: SARON~ 37.9
7 NA -479 NA NA NA NA NA 9 NA GREECE: MACED~ 39.7
8 NA -432 NA NA NA NA NA NA NA GREECE: ROMAN~ 37
9 NA -426 6 NA NA NA NA 10 NA GREECE: EUBOEA 38.9
10 NA -400 NA NA NA NA NA NA NA IRAN: REY,EIV~ 35.5
非常感谢您提前。
解决方案
我认为当前的最佳做法是在 CE 中设置日期,然后减去年份以达到 BCE。算术可能是粗略的,因为没有零年,但这个例子似乎可以按预期工作:
lubridate::ymd("0000-09-29") - lubridate::years(480)
有关更多详细信息,您可以查看Tayflo 对 lubridate 的关于 BCE 日期的 github 问题的详尽解释,该问题几天前刚刚重新打开。
编辑:对于您的特定数据,您只需将值粘贴到 lubridate::ymd_hms() 函数中,它会将其解析为单个列
NOAA_data %>% mutate(date = ymd_hms(paste0(c('0000','-', Mo,'-', Dy,
'_', Hr,':', Mn, ':', Sec))) -
lubridate::years(Year))
您还必须为您的 NA 添加一些 ifelse(),将每个设置为合理的默认值(例如,01 代表天,00 代表分钟等)。我不会将它添加到我的示例代码中,因为它会更难阅读。
推荐阅读
- php - 如何从 Yii2 Gridview 值调用模型函数
- javascript - ng-model 不会更新
- selenium - 如何从相同的元素中获取多个相同的 href 链接
- wordpress - 为什么我必须多次刷新 WordPress 网站才能显示?
- c# - 检查 S3 的权限
- c - 在客户端运行 C DLL 的最佳方法是什么?
- airflow - 气流:通过带有参数/配置的 UI 触发 DAG
- c - 使用 ffmpeg 查找 .mp4 文件中的每 30 帧
- c++ - 在 C++ 中强制转换为 int8_t* 意味着什么?
- java - 有什么方法可以获取 XMLPullParser 函数的进度吗?