如果在另一列中满足条件,则更改日期列

Changing date column if condition is met in another column

我有一个包含图像元数据的大型数据集。对于某些相机,日期设置错误,我正在尝试更正。这看起来很简单,但我无法弄清楚如何在不分解数据集的情况下做到这一点。下面的代码基本上显示了我正在尝试做的事情,但是,我想在不创建子集的情况下调整完整数据框中的值。

library(lubridate)
data <- data.frame(camera= c("1", "1", "2", "2"),
                   date = c("2000-1-02 01:02:03", "2000-1-02 01:02:03","2000-2-02 01:02:03","2000-2-02 01:02:03"))

data$date <- as.POSIXct(data$date)

camera1 <- subset(data, camera== "1")

camera1$date <- camera1$date - months(1)

我尝试使用 dplyr 包和 'if' 函数使其工作,但似乎 POSIXct 格式使事情变得有点复杂。我最好同时对多台摄像机进行同一时间调整。

假设您有多个摄像头,每个摄像头都有自己的正确时间偏移量;相机1快一个月,相机3慢一个月

data %>% 
  mutate(date = 
           case_when(camera == 1 ~ date - months(1),
                     camera == 3 ~ date + months(1),
                     TRUE ~ date))

  camera                date
1      1 1999-12-02 01:02:03
2      1 1999-12-02 01:02:03
3      2 2000-02-02 01:02:03
4      2 2000-02-02 01:02:03