#r
Вопрос:
Использование таких данных:
data.frame(id = c(1,2,3), time = c("2020-11-04T13:29:30Z", "2016-10-30T21:10:39Z", "2019-03-30T21:10:39Z"))
Как можно создать новую колонку, в которой будет отображаться первое из второго полугодия определенного года?
data.frame(id = c(1,2,3), time = c("2020-11-04T13:29:30Z", "2016-10-30T21:10:39Z", "2019-03-30T21:10:39Z"), timespand = c("2020-12","2016-12","2019-06"))
использование 06-это первая половина года, а использование 12-вторая половина года
Ответ №1:
Мы можем использовать base R
это ( R 4.1.0
)
transform(df, time = as.POSIXct(time, format = '%FT%T'))|>
transform(timespand = sprintf('%s-d', format(time, '%Y'),
c(6, 12)[1 (as.integer(format(time, '%m')) > 6)]))
-выход
id time timespand
1 1 2020-11-04 13:29:30 2020-12
2 2 2016-10-30 21:10:39 2016-12
3 3 2019-03-30 21:10:39 2019-06
Ответ №2:
В зависимости от месяца time
столбца вставьте значение 6 или 12 в значение года.
library(dplyr)
library(lubridate)
df %>%
mutate(time = ymd_hms(time),
timespand = paste(year(time),
ifelse(month(time) > 6, '12', '06'), sep = '-'))
# id time timespand
#1 1 2020-11-04 13:29:30 2020-12
#2 2 2016-10-30 21:10:39 2016-12
#3 3 2019-03-30 21:10:39 2019-06
Ответ №3:
Вот еще одна возможность использования substr
library(dplyr)
library(lubridate)
df1 %>%
dplyr::mutate(half_year = paste(substr(time, 1, 4),
ifelse(as.numeric(substr(time, 6, 7)) > 6, "12","06"),
sep = "-"),
time = ymd_hms(time), .keep="used")
Выход:
time half_year
1 2020-11-04 13:29:30 2020-12
2 2016-10-30 21:10:39 2016-12
3 2019-03-30 21:10:39 2019-06