Я пытаюсь использовать dplyr для работы с SQL базами данных, используя R , и я хотел бы изящно обработать SQL Значения NULL - либо просто отфильтровывая их, либо обрабатывая их как нули при появлении, в зависимости от сценария - без внесения каких-либо изменений в саму базовую базу данных.(Другими словами, я не спрашиваю о преобразовании всех значений NULL в ноль из SQL.)
По сути, я пытаюсь использовать dplyr для работы с SQL базами данных, но я продолжаю получать неожиданные результаты.
# Using Lahman's Database, available here:
# https://www.kaggle.com/seanlahman/the-history-of-baseball
library(dplyr)
db.path <- '~/data/SQLite Databases/the-history-of-baseball/database.sqlite'
con <- DBI::dbConnect(RSQLite::SQLite(), db.path)
batting_db <- tbl(con, 'batting')
# the result of this code is at least (seemingly) correct--the columns appear
# to be the correct type and the entries shown are all accurate:
batting_db %>%
filter(hr >= 50)
# however, when the additional constraint is added, columns get coerced to
# characters and rows where hr == '' start showing up
batting_db %>%
filter(hr >= 50, year >= 1985)
Во-первых, почему это вообще проблема?Почему пустые строки не будут отфильтрованы, так как '' >= 50
оценивается как ЛОЖЬ?(Примечание: добавление дополнительного ограничения, которое, по-видимому, hr != ''
исправило это поведение, хотя я до сих пор не понимаю, почему ...)
Кроме того, теперь я могу преобразовать эти пустые строки в ноль.Я даже не уверен, что это необходимо, так как, очевидно, dplyr рассматривает их как ноль в вычислениях (?!).
# mutate appears to treat these empty strings as '0' in calculations
batting_db %>%
filter(hr >= 30, year >= 1985) %>%
select(player_id:g, h, hr) %>%
mutate(hr2 = hr + 5, hr3 = g * hr)
По сути, я просто не получаю Поведение dplyr при использовании его для доступа к базам данных, и я был бы признателен за любую информацию.