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将查询输出转换为表的主要内容,如果未能解决你的问题,请参考以下文章