R将查询输出转换为表

Posted

技术标签:

【中文标题】R将查询输出转换为表【英文标题】:R convert query output to table 【发布时间】:2015-08-16 13:12:29 【问题描述】:

R 编程新手。 我有一个简单的 sql server 查询,其输出如下所示:

EFFECTIVE_DATE  NumberOfUser
 2015-07-01         564
 2015-07-02         433
 2015-07-03         306
 2015-07-04         50

这是我发出查询的方式:

 barData <- sqlQuery(sqlCon, 
                     "select EFFECTIVE_DATE,COUNT(USER_ID) as NumberOfUser from UserTable where start_dt between '20150701' AND '20150704' group by EFFECTIVE_DATE order by EFFECTIVE_DATE")

现在我正在从 R 运行此查询,并希望对此进行条形图。最好的方法是什么?

另外,我如何将任何查询结果转换为我可以用来做 barplot 的 data.table?当我尝试table(myList) 时,它显示的格式完全不同。

【问题讨论】:

没有这样的实际代码..我刚刚将查询输出存储在一个变量中,现在我想从中绘制一个条形图。 barData 【参考方案1】:

sqlQuery 上的帮助(我一般不使用 ODBC)说“成功时,返回一个数据框……”。这意味着您应该能够执行以下操作:

barplot(barData$NumberOfUser, names.arg=barData$EFFECTIVE_DATE,
        xlab="Effective Date", ylab="Number of Users")

但是将dput(barData) 的输出发布到您的问题中确实会更容易为您提供帮助。

【讨论】:

非常感谢您的帮助 :) 能否解释一下 list 到 data.table 的转换 我们可以在 barplot() 中设置 las=2 嗯,它并不是真正的list(本身)。这是data.frame。做class(barData) 你会发现它确实是(很可能......因为我这里没有数据)data.frame【参考方案2】:

假设您在 R 中使用了 sqldf 包,则使用 sqldf(x, stringsAsFactors = FALSE,...) 语句执行 SELECT EFFECTIVE_DATE, NUM_OF_USERS FROM USERTABLE 形式的 sql 查询:

sql_string <- "select
          effective_date
         , num_of_users
          from USRTABLE"

user_dates <- sqldf(join_string,stringsAsFactors = TRUE)

产生一个 data.frame 对象。使用 data.table 包将数据框转换为数据表:

user_dates <- as.data.table(user_dates)

将使用 sqldf 语句创建一个新的数据框user_dates。 sqldf 语句至少需要一个字符串来执行 SQL 操作。 stringsAsFactors 参数将强制分类变量具有类字符而不是因子。

编辑:真诚的道歉,没有看到你在问题中说明包名。如果您决定使用 sqldf 包,创建条形图是对 barplot(height, ...) 函数的直接调用:

barplot(user_dates$num_of_users,names.arg=user_dates$effective_date)

另外请注意,sqlQuery 成功执行的结果是一个数据框而不是一个列表:

成功时,一个数据框(可能有 0 行)或字符串。出错时,如果 错误 = TRUE 错误消息的字符向量,否则为不可见的整数错误代码 -1 (一般,打电话 odbcGetErrMsg 详情)或 -2 (没有数据,这可能不像某些 SQL 语句那样是错误的 不返回任何数据)。

【讨论】:

我使用了 RODBC,当我给出 typeOf(resultSet) 时,它会显示列表。 上次我检查sqlQuery 不在sqldf 包中,所以这是一个错误的假设 ok..sow 我如何将此列表转换为我可以实际执行条形图的表格?谢谢 那么当我说 typeOf(queryOutput) 时,为什么它说 list? 'class(object)' 是你应该使用的函数;它给出了对象的抽象类型。 typeof(object) 从 R 的角度给出对象的类型,即它如何存储在内存中。 [rfunction.com/archives/770]

以上是关于R将查询输出转换为表的主要内容,如果未能解决你的问题,请参考以下文章

使用 xml 将 csv 值转换为表行。谁能解释一下下面提到的查询将如何工作

MySQL日志文件与分析

SQL查询将列值显示为表中的列名

MYSQL数据库--定义表和字段的别名

sql查询结果部分替换

如何将 presto 查询输出转换为 python 数据框