r - 使用 dbplyr 时避免算术溢出错误
问题描述
这个问题与这个问题类似,但总结起来,所以发布的答案不太合适。数据是这样的,一行标识一个单位时间对:
large_sql_df
id t var1 var2
1 1 10 0
1 2 20 1
2 1 11 0
我想按var2
时间汇总t
:
localdf <- large_sql_df %>%
group_by(var, t) %>%
summarise(count = n(), var1_mean = mean(var1))
这给出了错误:“将表达式转换为数据类型 int 的算术溢出错误。” 我认为这是因为count
成为一个非常大的数字。有没有办法阻止这种情况发生而不必在 SQL 中进行整个查询?
解决方案
这只是详细说明了@simon-sa 答案的一些要素:
library(dplyr, warn.conflicts = FALSE)
df <- read.table(header = TRUE, text = "
id t var1 var2
1 1 10 0
1 2 20 1
2 1 11 0")
large_sql_df <- dbplyr::tbl_memdb(df)
localdf <-
large_sql_df %>%
mutate(var1 = as.double(var1)) %>%
group_by(var2, t) %>%
summarise(count = n(), var1_mean = mean(var1, na.rm = TRUE),
.groups = "drop")
localdf
#> # Source: lazy query [?? x 4]
#> # Database: sqlite 3.35.5 [:memory:]
#> var2 t count var1_mean
#> <int> <int> <int> <dbl>
#> 1 0 1 2 10.5
#> 2 1 2 1 20
localdf %>% show_query()
#> <SQL>
#> SELECT `var2`, `t`, COUNT(*) AS `count`, AVG(`var1`) AS `var1_mean`
#> FROM (SELECT `id`, `t`, CAST(`var1` AS REAL) AS `var1`, `var2`
#> FROM `df`)
#> GROUP BY `var2`, `t`
由reprex 包于 2021-07-07 创建 (v2.0.0 )
推荐阅读
- reactjs - 模态触发器 - 鼠标位置
- python - locateAllOnScreen 多次找到同一张图片
- javascript - Vue3如何将道具发送到创建的子组件
- amazon-web-services - 用镜头捕捉多个异常
- julia - 如何在 Plots.jl 中旋转条形图?
- angular - 测试角度服务返回值
- openapi - Springfox Java Bean 验证未在 Swagger 输出中显示验证组
- entity-framework-core - Entity Framework Core ExecuteSqlInterpolated 给出 Microsoft.Data.SqlClient.SqlException
- javascript - html标签发送带有href的对象
- python - 计算在熊猫数据透视表中使用的出现次数