Как я могу найти скорость прохождения, используя dbplyr в R?

#r #dataframe #sqlite

Вопрос:

Вот данный код:

 library(RSQLite)
library(DBI)
sqcon<-dbConnect(dbDriver("SQLite"), "data/sqlite.db")
events <- read_csv("events_log.csv")
sqevents <- copy_to(sqcon, events)
sqevents
 

Фрейм данных sqevents выглядит следующим образом:

 ## # Source:   table<events> [?? x 9]
## # Database: sqlite 3.35.5 [C:UsersJamesDocumentsWork2021 Sem2Stats
## #   369lab4Datasqlite.db]
##    uuid         timestamp session_id  group action   checkin page_id   n_results
##    <chr>            <dbl> <chr>       <chr> <chr>      <dbl> <chr>         <dbl>
##  1 00000736167~   2.02e13 78245c2c3f~ b     searchR~      NA cbeb66d1~         5
##  2 00000c69fe3~   2.02e13 c559c3be98~ a     searchR~      NA eb658e87~        10
##  3 00003bfdab7~   2.02e13 760bf89817~ a     checkin       30 f99a9fc1~        NA
##  4 0000465cd7c~   2.02e13 fb905603d3~ a     checkin       60 e5626962~        NA
##  5 000050cbb4e~   2.02e13 c2bf5e5172~ a     checkin       30 787dd6a4~        NA
##  6 0000a6af2ba~   2.02e13 f6840a9614~ a     checkin      180 6fb7b9ea~        NA
##  7 0000cd61e11~   2.02e13 51f4d3b6a8~ a     checkin      240 8ad97e7c~        NA
##  8 000104fe220~   2.02e13 485eabe537~ b     searchR~      NA 4da9a642~        15
##  9 00012e37b74~   2.02e13 91174a537d~ a     checkin      180 dfdff179~        NA
## 10 000145fbe69~   2.02e13 a795756dba~ b     checkin      150 ec0bad00~        NA
## # ... with more rows, and 1 more variable: result_position <dbl>
 

Я хочу найти частоту кликов, которая соответствует доле session_id, у которых есть действие==»Страница посещения».

Мой текущий код таков:

 sqevents %>% group_by(session_id) %>% 
summarise(clickthrough = sum(action=="visitPage")) %>% filter(clickthrough=="0") %>% collect()
 

Однако это ничего не возвращает:

 ## # A tibble: 0 x 2
## # ... with 2 variables: session_id <chr>, clickthrough <lgl>
 

Что я сделал не так? И как мне это исправить?

Комментарии:

1. У меня в коде есть функция collect (), но она ничего не возвращает

Ответ №1:

Возможно, нам может потребоваться отменить кавычки "0" , как на предыдущем шаге, с sum возвращением numeric обобщенных выходных данных. Кроме того, если есть NA элементы, укажите na.rm = TRUE in sum или любое другое пропущенное значение в столбце возвращает значение sum NA as na.rm = FALSE по умолчанию.

 library(dplyr)
sqevents %>% 
    group_by(session_id) %>% 
    summarise(clickthrough = sum(action=="visitPage", na.rm = TRUE)) %>%
    filter(clickthrough == 0) %>%
     collect()
 

Кроме того, в другом случае для каждой «session_id» имеется по крайней мере одна «Страница посещения», поэтому filter шаги возвращают 0 строк

Комментарии:

1. БРАТАН, ты потрясающий. Я сделал это с помощью одного csv-файла некоторое время назад с аналогичным кодом, но с «0». Похоже, без «» сработало. Спасибо тебе, мой друг!

Ответ №2:

Из вашего описания » [ … ], которое представляет собой долю session_id, у которых есть действие==»Страница посещения» […]» вы можете совершить ошибку дальше по каналу, используя sum(). Хороший способ рассчитать описанную вами пропорцию может быть следующим:

 library(dplyr)

sqevents %>%
    dplyr::group_by(session_id) %>%
    # check if a session has at least one "visitPage" (true or false = 1 or 0)
    dplyr::summarise(yn = any(action == "visitPage")) %>%
    # build a mean from that to get the proportion
    dplyr::summarise(prop = mean(yn))
    # and collect if you like