Релиз dtplyr 1.2.0
dtplyr дает вам скорость обработки данных data.table с синтаксисом dplyr; вы пишете код на dplyr (и tidyr), а dtplyr переводит его в эквивалент data.table.
Что нового:
В dtplyr стали доступны переводы следующих глаголов из tidyr: complete(), drop_na(), expand(), fill(), nest(), pivot_longer(), replace_na() и separate().
Примеры:
dt <- lazy_dt(data.frame(x = c(NA, "x.y", "x.z", "y.z")))
dt %>%
separate(x, c("A", "B"), sep = "\\.", remove = FALSE) %>%
show_query()
#> copy(`_DT1`)[, `:=`(c("A", "B"), tstrsplit(x, split = "\\."))]
dt <- lazy_dt(data.frame(x = c(1, NA, NA, 2, NA)))
dt %>%
fill(x) %>%
show_query()
#> copy(`_DT2`)[, `:=`(x = nafill(x, "locf"))]
dt %>%
replace_na(list(x = 99)) %>%
show_query()
#> copy(`_DT2`)[, `:=`(x = fcoalesce(x, 99))]
dt <- lazy_dt(relig_income)
dt %>%
pivot_longer(!religion, names_to = "income", values_to = "count") %>%
show_query()
#> melt(`_DT3`, measure.vars = c("<$10k", "$10-20k", "$20-30k",
#> "$30-40k", "$40-50k", "$50-75k", "$75-100k", "$100-150k", ">150k",
#> "Don't know/refused"), variable.name = "income", value.name = "count",
#> variable.factor = FALSE)
Функции соединения (inner_join(), left_join() и right_join()) были переписаны и под капотом используют [, вместо merge().
Примеры:
dt1 <- lazy_dt(data.frame(x = 1:3))
dt2 <- lazy_dt(data.frame(x = 2:3, y = c("a", "b")))
dt1 %>% inner_join(dt2, by = "x") %>% show_query()
#> `_DT4`[`_DT5`, on = .(x), nomatch = NULL, allow.cartesian = TRUE]
dt1 %>% left_join(dt2, by = "x") %>% show_query()
#> `_DT5`[`_DT4`, on = .(x), allow.cartesian = TRUE]
dt2 %>% right_join(dt1, by = "x") %>% show_query()
#> `_DT5`[`_DT4`, on = .(x), allow.cartesian = TRUE]dt1 <- lazy_dt(data.frame(x = 1:3))
dt2 <- lazy_dt(data.frame(x = 2:3, y = c("a", "b")))
dt1 %>% inner_join(dt2, by = "x") %>% show_query()
#> `_DT4`[`_DT5`, on = .(x), nomatch = NULL, allow.cartesian = TRUE]
dt1 %>% left_join(dt2, by = "x") %>% show_query()
#> `_DT5`[`_DT4`, on = .(x), allow.cartesian = TRUE]
dt2 %>% right_join(dt1, by = "x") %>% show_query()
#> `_DT5`[`_DT4`, on = .(x), allow.cartesian = TRUE]
Это обновление немного удлиняет перевод для простых объединений, но значительно упрощает базовый код. Это упростило более точное соответствие поведения dplyr для порядка столбцов, обработки названий по спецификациям, декартовых соединений by = character() и управления дублированными именами столбцов.
Ссылки:
- информация заимствована из статьи "dtplyr 1.2.0"
#новости_и_релизы_R