Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

4 года назад
Открыть в
​​Релиз dtplyr 1.2.0 dtplyr дает вам скорость обработки данных data.table с синтаксисом dplyr; вы пишете код на dplyrtidyr), а 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