#r #tidyverse #purrr #seq
#r #аккуратная вселенная #муррр #seq
Вопрос:
Я пытаюсь подсчитать, сколько дней в столбце dias_trabajo
dias_evaluar
.
library(tidyverse)
library(lubridate)
Это мининал репрекс:
tibble(
dias_trabajo = list(seq(ymd("2021-01-01"), ymd("2021-01-22"), by = "day"), seq(ymd("2021-01-04"), ymd("2021-01-22"), by = "day")),
dias_evaluar = list(seq(ymd("2021-01-01"), ymd("2021-01-07"), by = "day"))
) %>%
mutate(
trabajo = map(dias_trabajo, function(x) x %in% dias_evaluar) %>% map_int(sum)
)
Приведенный выше код выдает нули по адресу trabajo
.
# A tibble: 2 x 3
dias_trabajo dias_evaluar trabajo
<list> <list> <int>
1 <date [22]> <date [7]> 0
2 <date [19]> <date [7]> 0
Я ожидаю, что столбец trabajo
будет: первая строка: 7, вторая строка: 4.
Я попробовал использовать только одну строку, и это сработало:
seq(ymd("2021-01-01"), ymd("2021-01-22"), by = "day") %in% seq(ymd("2021-01-01"), ymd("2021-01-07"), by = "day") %>% sum()
дает. Это ожидаемый результат для первой строки.
[1] 7
Комментарии:
1.
map2
. У вас есть два спискаdias_trabajo
иdias_evaluar
2. Не могли бы вы опубликовать и ответить?, Я выберу ваш ответ как правильный.
Ответ №1:
Поскольку у вас есть два списка в качестве входных dias_trabajo
данных, и dias_evaluar
вам нужно использовать map2
library(tidyverse)
library(lubridate)
tb %>%
mutate(
trabajo = map2_dbl(.x = dias_trabajo, .y = dias_evaluar, ~sum(.x %in% .y))
)
# A tibble: 2 x 3
dias_trabajo dias_evaluar trabajo
<list> <list> <int>
1 <date [22]> <date [7]> 7
2 <date [19]> <date [7]> 4
данные:
tb <- tibble(
dias_trabajo = list(seq(ymd("2021-01-01"), ymd("2021-01-22"), by = "day"), seq(ymd("2021-01-04"), ymd("2021-01-22"), by = "day")),
dias_evaluar = list(seq(ymd("2021-01-01"), ymd("2021-01-07"), by = "day"))
)