【问题标题】:R convert query output to tableR将查询输出转换为表
【发布时间】: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

标签: r sql-server-2008-r2 dataframe rodbc


【解决方案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]
猜你喜欢
  • 1970-01-01
  • 2011-07-07
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多