根据框架中的另一列调整R数据框架中的值



我正在处理一些相机陷阱数据,有些相机位于不同的时区和/或相机的内部时间不正确。我有一个数据帧,其中包含每个媒体文件的名称和时间戳,以及相机设置的时区和媒体文件的时间戳需要调整的程度。我不确定如何调整值,虽然-一切我已经能够查找到目前为止是替换整个值,而不是调整他们。我应该使用什么函数来从媒体文件日期值中添加或减去时间调整持续时间值?

我目前使用的是tidyr,dplyrlubridate,所以理想情况下使用这些软件包和基础将是最好的。

数据框看起来像这样:

time-adjust-directiontbody> <<tr>
时区time-adjust-valuemedia-file-namemedia-file-date
site_dateUTC 7积极0000:00:00 00:10:0008100001. jpg2021:08:10 06:48:00
site_dateUTC 7积极0000:00:00 00:10:0008100002. jpg2021:08:10 06:59:40
site_dateUTC 6-0000:00:00 00:25:0011300050. jpg2020:11:30 12:13:05
site_dateUTC 7没有0000:00:00就是07110154. jpg2021:07:11 09:10:00

dplyr不支持就地调整。调整变量值的方法是替换它们,换句话说,进行感兴趣的计算,然后覆盖原始变量,通常使用mutate()

在这个上下文中,它应该是类似

的东西
library(dplyr)
dat <- dat %>%
mutate(`media-file-date` = `media-file-date` - time_adjustment_variable)

在您的数据的情况下,我不认为那些0000:00:00 00:10:00值将被解析为您想要的。假设它们的长度都不到一天,您可能希望先将它们转换为HMS,然后再减去它们。就拿HMS部分来说(最后一个单词)。使用润滑油转换为HMS。您可以使用case_when()来确定是否要添加或减去:

library(dplyr)
library(lubridate)
library(stringr)
dat <- dat %>%
mutate(adjust_hms = hms(word(`time-adjust-value`, -1))) %>%
mutate(`media-file-date` = case_when(
`time-adjust-direction` == 'positive' ~ `media-file-date` + adjust_hms,
`time-adjust-direction` == 'negative' ~ `media-file-date` - adjust_hms,
TRUE ~ `media-file-date` # don't adjust the 'none's or anything else
))

最新更新