Size: a a a

R (язык программирования)

2021 January 25

A

Alexey in R (язык программирования)
Машка
Привет привет 🙂 Подскажите, пожалуйста, как красиво разделить датафрейм на массив датафреймов, разделение нужно сделать сразу после каждого ивента
если у вас есть  user id то split(df , f = df$userid ) получите листы с каждым отдельным юзером. Если user id нет то нужно его сгенерить
источник

ВП

Владимир Попукайло... in R (язык программирования)
это чатик по R, а не python :)
источник

PU

Philipp Upravitelev in R (язык программирования)
Машка
Привет привет 🙂 Подскажите, пожалуйста, как красиво разделить датафрейм на массив датафреймов, разделение нужно сделать сразу после каждого ивента
создайте отдельную колонку, в которую запишете идентификатор пользователя (user). для строк, где Operator, будут пропуски. потом пройдите zoo::na.locf или data.table::nafill, и заполните пропуски в строках где оператор, последним не-пустым значением (то есть, user id). после этого группируйте или семплируйте по этому user_id
источник

ЮМ

Юта Мата Ссс... in R (язык программирования)
Машка
Привет привет 🙂 Подскажите, пожалуйста, как красиво разделить датафрейм на массив датафреймов, разделение нужно сделать сразу после каждого ивента
Коряво немного, но можно попробовать вот так:
tibble(
 from = c("user", "operator", "operator", "operator","user","operator","operator","user","operator","operator"),
 type = c("text", "text", "text", "event","text","text","event","text","text","text")) %>%
 group_by(type) %>%
 mutate(foo = row_number()) %>%
 ungroup() %>%
 mutate(
   foo = ifelse(type == "text", 0, foo),
   foo = lag(foo, default = 0),
   bar = cumsum(foo)) %>%
 group_by(bar) %>%
 group_split()
источник

PU

Philipp Upravitelev in R (язык программирования)
чот я не понял. разделить надо на две части, но строки с event - 2. делить по пользователю как-то странно, вроде задача не такая.
источник

PU

Philipp Upravitelev in R (язык программирования)
если по пользователю, то решение вот такое. в синтаксисе data.table:
> tmp <- data.table(
+   from = c("user", "operator", "operator", "operator","user","operator","operator","user","operator","operator"),
+   type = c("text", "text", "text", "event","text","text","event","text","text","text"))
> tmp[from == 'user', new_id := rowid(from)]
> tmp[, new_id := nafill(new_id, type = 'locf')]
> tmp
       from  type new_id
1:     user  text      1
2: operator  text      1
3: operator  text      1
4: operator event      1
5:     user  text      2
6: operator  text      2
7: operator event      2
8:     user  text      3
9: operator  text      3
10: operator  text      3
источник

PU

Philipp Upravitelev in R (язык программирования)
если по event, то вот так
tmp[type == 'event', new_id := rowid(type)]
tmp[, new_id := nafill(new_id, type = 'nocb')]
tmp[is.na(new_id), new_id := 0]

> tmp
       from  type new_id
1:     user  text      1
2: operator  text      1
3: operator  text      1
4: operator event      1
5:     user  text      2
6: operator  text      2
7: operator event      2
8:     user  text      0
9: operator  text      0
10: operator  text      0
источник

YS

Yuriy Saraikin in R (язык программирования)
df %>% 
 mutate(grp = cumsum(lag(if_else(type == "event", 1 ,0), default = 0))) %>%
 group_split(grp)
library(data.table)
setDT(df)
df[, grp := cumsum(shift(ifelse(type == "event", 1, 0), fill = 0))]
split(df, df$grp)
источник

М

Машка in R (язык программирования)
Спасибо 🤗 Буду тестить
источник

М

Машка in R (язык программирования)
А как понимать оператор ' := ' ? Не встречала раньше
источник

DP

Dmitry Penzar in R (язык программирования)
Alexander Semenov
Т.е. человек не спит ночами и строит симуляции в попытках понять вещи, про которые он рассказывал на курсе?
дык он в курсе лажает тоже
источник

DP

Dmitry Penzar in R (язык программирования)
о чем речь-то:)
источник

PU

Philipp Upravitelev in R (язык программирования)
Машка
А как понимать оператор ' := ' ? Не встречала раньше
это оператор (и вообще, весь синтаксис решения) из пакета data.table - ссылка на мои вебинары лежит в закрепе.
источник

PU

Philipp Upravitelev in R (язык программирования)
Dmitry Penzar
дык он в курсе лажает тоже
в курсе лажает? в каком?
источник

PU

Philipp Upravitelev in R (язык программирования)
Yuriy Saraikin
df %>% 
 mutate(grp = cumsum(lag(if_else(type == "event", 1 ,0), default = 0))) %>%
 group_split(grp)
library(data.table)
setDT(df)
df[, grp := cumsum(shift(ifelse(type == "event", 1, 0), fill = 0))]
split(df, df$grp)
это у вас два решения?
я удивился, увидев dt в середине просто
источник

DP

Dmitry Penzar in R (язык программирования)
Philipp Upravitelev
в курсе лажает? в каком?
своем. Он в первой части основ статистике лажает. И там это замечают, но слабо. А на следующие части там даже в отзывах на курс про то, что курс - плохой есть
источник

PU

Philipp Upravitelev in R (язык программирования)
вторую часть я не смотрел. да и в первой только полтора первых блока, кажется, просмотрел, где самый минимум типа z-распределения и дов.интервалов.
источник

DP

Dmitry Penzar in R (язык программирования)
Ну, я к тому, что там лажи. Он даже цпт с ошибкой формулировал
источник

PU

Philipp Upravitelev in R (язык программирования)
ага, понял. спасибо.
источник

DP

Dmitry Penzar in R (язык программирования)
Я скандалил через знакомых - он кривовато поправил
источник