Возьмите половину года

#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