tcltk::as.tclObj(X) 中的错误:无法处理模式“列表”的对象
Error in tcltk::as.tclObj(X) : cannot handle object of mode 'list
我对 R studio 和 Sqldf
很陌生。即使我想彻底解释它,我也不知道问题是什么。我正在尝试使用 SQL 代码来计算 zip_code
列中所有不同的邮政编码。我知道我在某处需要 Distinct
和 Count
,但我不知道它如何与 Sqldf
一起使用。我也不知道为什么在执行此基本代码时会出现以下错误:
Det_Crime %>% sqldf("select zip_code, from Det_Crime")
tcltk::as.tclObj(X) 中的错误:无法处理模式 'list
的对象
我的数据:
还有办法在 dplyr
上做到这一点吗?
输入
Det_Crime <- tibble(zip_code=c("01001", "01001", "01002"))
使用dplyr::count()
Det_Crime %>% count(zip_code)
输出:
zip_code n
<chr> <int>
1 01001 2
2 01002 1
langtang的dplyr方法不错。至于你的错误和 SQL 问题:
不要将帧传递给 sqldf
,应该只传递查询。在这种情况下,尝试 sqldf(mtcars, "select cyl")
并查看错误。这是因为 sqldf
试图对第一个不是字符串的参数做一些 string-like 的事情。它将根据 SQL 查询本身中的表引用查找特定帧,因此 from Det_Crime
将触发它在调用环境(或更高版本)中查找对象 Det_Crime
。
解决方案:不要像您所做的那样在 %>%
-管道中使用 sqldf(.)
。 (如果需要,它可以 先于 管道。)
select zip_code, from Det_Crime
无效SQL,逗号错误
解决方案: sqldf("select zip_code from Det_Crime")
是一个开始。
最终,您可以通过
在SQL中得到您需要的东西
sqldf("select zip_code, count(*) as n from Det_Crime group by zip_code")
sqldf 在这样的管道中使用。我们以内置 BOD 数据框为例。大括号防止它自动将左侧插入到 sqldf 的第一个参数中,SQL 字符串中的 [.] 指的是管道的左侧。
BOD %>% { sqldf("select * from [.]") }
## Time demand
## 1 1 8.3
## 2 2 10.3
## 3 3 19.0
## 4 4 16.0
## 5 5 15.6
## 6 7 19.8
或者在没有管道的情况下独立使用它。这给出了相同的结果。
sqldf("select * from BOD")
关于如何计算列中不同值的数量,这给出了 built-in mtcars 数据框的 cyl 列中不同值的数量。如果您想要行数,请将 count(...) 替换为 count(*)。
sqldf("select count(distinct cyl) as count from mtcars")
## count
## 1 3
获取每个柱体的行数:
sqldf("select cyl, count(*) as count
from mtcars
group by cyl")
## cyl count
## 1 4 11
## 2 6 7
## 3 8 14
我对 R studio 和 Sqldf
很陌生。即使我想彻底解释它,我也不知道问题是什么。我正在尝试使用 SQL 代码来计算 zip_code
列中所有不同的邮政编码。我知道我在某处需要 Distinct
和 Count
,但我不知道它如何与 Sqldf
一起使用。我也不知道为什么在执行此基本代码时会出现以下错误:
Det_Crime %>% sqldf("select zip_code, from Det_Crime")
tcltk::as.tclObj(X) 中的错误:无法处理模式 'list
的对象我的数据:
还有办法在 dplyr
上做到这一点吗?
输入
Det_Crime <- tibble(zip_code=c("01001", "01001", "01002"))
使用dplyr::count()
Det_Crime %>% count(zip_code)
输出:
zip_code n
<chr> <int>
1 01001 2
2 01002 1
langtang的dplyr方法不错。至于你的错误和 SQL 问题:
不要将帧传递给
sqldf
,应该只传递查询。在这种情况下,尝试sqldf(mtcars, "select cyl")
并查看错误。这是因为sqldf
试图对第一个不是字符串的参数做一些 string-like 的事情。它将根据 SQL 查询本身中的表引用查找特定帧,因此from Det_Crime
将触发它在调用环境(或更高版本)中查找对象Det_Crime
。解决方案:不要像您所做的那样在
%>%
-管道中使用sqldf(.)
。 (如果需要,它可以 先于 管道。)select zip_code, from Det_Crime
无效SQL,逗号错误解决方案:
sqldf("select zip_code from Det_Crime")
是一个开始。
最终,您可以通过
在SQL中得到您需要的东西sqldf("select zip_code, count(*) as n from Det_Crime group by zip_code")
sqldf 在这样的管道中使用。我们以内置 BOD 数据框为例。大括号防止它自动将左侧插入到 sqldf 的第一个参数中,SQL 字符串中的 [.] 指的是管道的左侧。
BOD %>% { sqldf("select * from [.]") }
## Time demand
## 1 1 8.3
## 2 2 10.3
## 3 3 19.0
## 4 4 16.0
## 5 5 15.6
## 6 7 19.8
或者在没有管道的情况下独立使用它。这给出了相同的结果。
sqldf("select * from BOD")
关于如何计算列中不同值的数量,这给出了 built-in mtcars 数据框的 cyl 列中不同值的数量。如果您想要行数,请将 count(...) 替换为 count(*)。
sqldf("select count(distinct cyl) as count from mtcars")
## count
## 1 3
获取每个柱体的行数:
sqldf("select cyl, count(*) as count
from mtcars
group by cyl")
## cyl count
## 1 4 11
## 2 6 7
## 3 8 14