Возможно, не самое простое, но это решение с регулярными выражениями работает:
df$created_at[df$difference == 0] <-
paste(sub("(^[^:]+:).*", "\\1", df$created_at[df$difference == 0]),
as.numeric(sub(".*\\d{2}:(\\d{2}):\\d{2}", "\\1", df$created_at[df$difference == 0])) +10,
sub(".*(:\\d{2}).*$", "\\1", df$created_at[df$difference == 0]), sep = "")
Объяснение:
Сначала вы ориентируетесь на значения даты, связанные с difference == 0
. К этим значениям применяются следующие операции, а именно:
- разрезать даты на соответствующие части (все до минут, сами минуты, все после минут),
- выполнять искомые измените (добавив 10 минут) и
- вставьте строки обратно вместе.
Единственным усложняющим фактором является то, что для добавления значения 10
к минутам, то, что возвращает регулярное выражение, должно быть преобразовано в тип numeric
:
Результат:
df
created_at difference
1 2020-04-08 14:30:47 89
2 2020-04-08 14:43:55 0
3 2020-04-08 14:37:02 2
4 2020-04-08 14:51:15 0
Данные:
df <- data.frame(
created_at = c("2020-04-08 14:30:47", "2020-04-08 14:33:55", "2020-04-08 14:37:02", "2020-04-08 14:41:15"),
difference = c(89, 0, 2, 0), stringsAsFactors = F
)