#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