Size: a a a

R language and Statistical data analysis

2020 March 13

PU

Philipp Upravitelev in R language and Statistical data analysis
слушайте его меньше, в списки-то может и внес, но делать что-то ему будет лень %)
источник

Ю

Юрий 🐙💻🤖📊📈🚬 in R language and Statistical data analysis
Друзья, это пятница так на всех действует?
источник

ЕТ

Евгений Томилов in R language and Statistical data analysis
Да, весна на дворе, распускаются пайпы.
источник

Ю

Юрий 🐙💻🤖📊📈🚬 in R language and Statistical data analysis
Друзья, я начал вести канал по PeopleAnalytics (People analytics is a data-driven approach to managing people at work).Пока публикую свои старые заметки по hr аналитике или около того. Кому интересно, welcome: https://t.me/joinchat/AAAAAEcRj1VEpPowRLW1ig
источник

AS

Alexander Semenov in R language and Statistical data analysis
Ну раз мы тут все балагурим, то вот задачка, которая с высокой вероятностью может оказаться "детской".

Есть список услуг (srvc) следующего вида:
источник

AS

Alexander Semenov in R language and Statistical data analysis
На основе этой таблицы с услугами и под-услугами, мне нужно произвести следующее преобразование в данных:
источник

AS

Alexander Semenov in R language and Statistical data analysis
Т.е. для каждого айдишника все subsrvc должны заменяться на пропуски и оставаться должны только "родительские" srvc.
источник

AS

Alexander Semenov in R language and Statistical data analysis
Вроде бы и просится какая-то помесь summarise() c group_by(), но что-то я туплю.
источник

AS

Alexander Semenov in R language and Statistical data analysis
Это вы так шутите штоль?
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
но логика такая же
источник

AS

Alexander Semenov in R language and Statistical data analysis
Philipp Upravitelev
но логика такая же
Это ты кому?
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
датасет дай, хотя бы игрушечный, я не понимаю, чего ты хочешь
идея про is.na() вполне подходит, кажется, но надо тестировать
источник

AS

Alexander Semenov in R language and Statistical data analysis
asis <- data.frame(
 id = c(1,1,1,2,2,2,2),
 srvc = c("A","B","C","D","E","F","G")
)

tobe <- data.frame(
 id = c(1,1,1,2,2,2,2),
 srvc = c("A",NA,NA,"D",NA,NA,NA)
)
источник

AS

Alexander Semenov in R language and Statistical data analysis
При этом есть таблица, где для каждого srvc (A, D) есть список subsrvc(B,C,E,F,G), которые к ним относятся.
источник

AS

Alexander Semenov in R language and Statistical data analysis
Соответственно мне нужно у каждого id оставить только "родительский" srvc, преобразовав все входящие в него subsrvc в пропуски, NA и т.д.
источник

⌨️ in R language and Statistical data analysis
Alexander Semenov
Соответственно мне нужно у каждого id оставить только "родительский" srvc, преобразовав все входящие в него subsrvc в пропуски, NA и т.д.
library(tibble)
library(tidyr)
library(dplyr)
library(vctrs)
library(purrr)

tbl_1 <- tibble(srvc = vec_c("A", "D"), subsrvc = list_of(vec_c("B", "C"), vec_c("E", "F", "G")))
tbl_1 %>% mutate(subsrvc = map(subsrvc, vec_c, NA_character_)) %>% unnest(subsrvc) %>% mutate(subsrvc2 = if_else(is.na(subsrvc), srvc, NA_character_), subsrvc = if_else(is.na(subsrvc), srvc, subsrvc)) -> tbl_1

tbl_2 <- tibble(id = vec_c(1, 1, 1, 2, 2, 2, 2), srvc = vec_c("A", "B", "C", "D", "E", "F", "G"))

tbl_2 %>% inner_join(tbl_1, by = c("srvc" = "subsrvc")) %>% transmute(id, srvc, subsrvc = subsrvc2) %>% print

#> # A tibble: 7 x 3
#>      id srvc  subsrvc
#>   <dbl> <chr> <chr>  
#> 1     1 A     A      
#> 2     1 B     <NA>  
#> 3     1 C     <NA>  
#> 4     2 D     D      
#> 5     2 E     <NA>  
#> 6     2 F     <NA>  
#> 7     2 G     <NA>
источник

AS

Alexander Semenov in R language and Statistical data analysis
Спасибо. Видимо задачка действительно не совсем детская.
источник

AS

Alexander Semenov in R language and Statistical data analysis
Сходу мне тут не всё понятно, поэтому, возможно я ещё вернусь с вопросами.
источник

PU

Philipp Upravitelev in R language and Statistical data analysis
Alexander Semenov
Спасибо. Видимо задачка действительно не совсем детская.
не?
> library(data.table)
> asis <- data.table(id = c(1, 1, 1, 2, 2, 2, 2),
+                    srvc = c("A", "B", "C", "D", "E", "F", "G"))
> asis[, heads := c(srvc[1], rep(NA, .N - 1)), by = id]
> asis
  id srvc heads
1:  1    A     A
2:  1    B  <NA>
3:  1    C  <NA>
4:  2    D     D
5:  2    E  <NA>
6:  2    F  <NA>
7:  2    G  <NA>
источник

AS

Alexander Semenov in R language and Statistical data analysis
"Спасибо, но лучше вы к нам" (с).
источник