интервал в месяцах между двумя столбцами в г - PullRequest
1 голос
/ 18 февраля 2020

У меня есть эти данные

"code";"min";"max"
"CM106";2016-12-01;2018-08-01
"CM107";2017-10-01;2019-11-01
"CM109";2017-01-01;2019-02-01
"CM113";2018-02-01;2019-03-01
"CM114";2016-10-01;2017-12-01
"CM118";2018-04-01;2018-11-01
"CM121";2018-05-01;2020-02-01
"CM126";2018-08-01;2018-11-01
"CM129";2017-01-01;2018-04-01
"CM131";2018-09-01;2020-05-01
"CM144";2018-02-01;2019-11-01
"CM150";2018-10-01;2019-04-01
"CM153";2018-05-01;2018-09-01
"CM154";2016-05-01;2019-06-01

формат дат: год-месяц-день

Я хочу создать новый столбец с интервалом в месяцах, который существует между " столбцы min "и" max "

Я пытался следовать этому ответу, но не сработал Подсчитать месяцы между двумя датами в data.table

Я получил это :

intervalos [, 2: 3: = lapply (.SD, as.IDate, format = "% Y.% m.% D"), .SDcols = 2: 3]

Ошибка в [.tbl_df (интервалы,, := (2: 3, lapply (.SD, as.IDate, format = "% Y.% m.% D")),: не используется аргумент (.SDcols = 2: 3)

1 Ответ

4 голосов
/ 18 февраля 2020

1.Создать воспроизводимый минимальный пример

df <- structure(list(c = c("CM106", "CM107", "CM109", "CM113", "CM114", "CM118", "CM121", "CM126", "CM129", "CM131", "CM144", "CM150", "CM153", "CM154"), 
                     min = c("2016-12-01", "2017-10-01", "2017-01-01", "2018-02-01", "2016-10-01", "2018-04-01", "2018-05-01", "2018-08-01", "2017-01-01", "2018-09-01", "2018-02-01", "2018-10-01", "2018-05-01", "2016-05-01"),
                     max = c("2018-08-01", "2019-11-01", "2019-02-01", "2019-03-01", "2017-12-01", "2018-11-01", "2020-02-01", "2018-11-01", "2018-04-01", "2020-05-01", "2019-11-01", "2019-04-01", "2018-09-01", "2019-06-01")),
                class = "data.frame", row.names = c(NA, -14L))

2.Решение с использованием базы R:

Использование as.Date

df$min <- as.Date(df$min, "%Y-%m-%d")
df$max <- as.Date(df$max, "%Y-%m-%d")

Рассчитать разницу:

Рассчитать разницу:

df$diff_days <- df$max - df$min
df$diff_months <- as.numeric(df$diff_days) /(365.25/12)

df$diff_days сейчас:

Time differences in days
 [1]  608  761  761  393  426  214
 [7]  641   92  455  608  638  182
[13]  123 1126

и df$diff_months:

 [1] 19.975359 25.002053 25.002053 12.911704 13.995893
 [6]  7.030801 21.059548  3.022587 14.948665 19.975359
[11] 20.960986  5.979466  4.041068 36.993840
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...