为什么 tidyverse::map 不能同时处理两个列表?
Why does tidyverse::map not work with two lists in one tibble?
我正在计算 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
因为您有两个列表作为输入 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"))
)
我正在计算 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
因为您有两个列表作为输入 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"))
)