标签: sqldf

按组选择第一行

来自这样的数据框架

test <- data.frame('id'= rep(1:5,2), 'string'= LETTERS[1:10])
test <- test[order(test$id), ]
rownames(test) <- 1:10

> test
    id string
 1   1      A
 2   1      F
 3   2      B
 4   2      G
 5   3      C
 6   3      H
 7   4      D
 8   4      I
 9   5      E
 10  5      J
Run Code Online (Sandbox Code Playgroud)

我想用每个id/string对的第一行创建一个新的.如果sqldf在其中接受R代码,则查询可能如下所示:

res <- sqldf("select id, min(rownames(test)), string 
              from test 
              group by id, string")

> res
    id string
 1   1      A
 3   2      B
 5   3      C
 7   4      D
 9   5      E …
Run Code Online (Sandbox Code Playgroud)

r dataframe sqldf

67
推荐指数
7
解决办法
8万
查看次数

总结dplyr中的条件

我将以一个例子来说明我的问题.

样本数据:

 df <- data.frame(ID = c(1, 1, 2, 2, 3, 5), A = c("foo", "bar", "foo", "foo", "bar", "bar"), B =     c(1, 5, 7, 23, 54, 202))

df
  ID   A   B
1  1 foo   1
2  1 bar   5
3  2 foo   7
4  2 foo  23
5  3 bar  54
6  5 bar 202
Run Code Online (Sandbox Code Playgroud)

我想要做的是通过ID总结B的总和以及当A是"foo"时B的总和.我可以通过以下几个步骤完成此操作:

require(magrittr)
require(dplyr)

df1 <- df %>%
  group_by(ID) %>%
  summarize(sumB = sum(B))

df2 <- df %>%
  filter(A == "foo") %>%
  group_by(ID) %>%
  summarize(sumBfoo = …
Run Code Online (Sandbox Code Playgroud)

r sqldf dplyr

40
推荐指数
3
解决办法
6万
查看次数

如果仅限于本地计算机,则最好使用R和SQL

我正在努力改进我的工作流程,并希望社区可以提供见解,因为我对"大数据"相对较新.

我通常从公共来源下载几个可以相互关联的数据帧.在提取了几个数据帧之后,我会在对最终数据集进行回归分析和/或其他推论统计之前,执行各种数据处理步骤(例如,过滤,排序,聚合,自定义计算).

具体而言,您会推荐哪种策略:

  1. 将所有数据作为单独的文件从Web下载到我的本地计算机上,然后使用R直接处理它(就像我一直在做的那样).我看到的潜在问题是,一切都在R的工作环境中,这可能会减慢进程并使我的机器崩溃.

要么

  1. 将所有数据作为单独的文件从Web下载到我的本地计算机上,在本地计算机上创建数据库sqldf,并使用后续查询sqldf从R中进行最终数据分析之前从该数据库中提取和聚合信息.我看到的问题是,在我的本地计算机上创建的数据库由少数表/数据帧组成,其sqldf大小比仅保存几个单独的.csv文件大.

我对统计技术非常熟悉,但我确实在数据库管理和服务器操作方面存在一些知识空白.我熟悉SQL的基本要素,作为一种语言,我知道如何使用sqldf在R工作环境中运行的数据帧.但是,我坦率地不知道它提供了什么优势,而不仅仅是学习如何使用基本R函数来过滤,排序和聚合数据.另外,我已经阅读了一些关于将SQL Server与R配对的大肆宣传的网页,但我不确定这对我来说是否是一个不错的选择,因为我在本地运行所有内容.

关于如何通过将R与SQL的一些实现相结合来改进我的数据处理和分析的新手的任何提示?

先感谢您!

sql database sql-server r sqldf

22
推荐指数
3
解决办法
957
查看次数

R:如何在不耗尽内存的情况下重新绑定两个巨大的数据帧

我有两个数据帧df1df2每个有大约10万行和4列.我使用RODBC/sqlQuery将它们读入R并没有任何问题,但是当我尝试rbind它们时,我得到了最可怕的R错误消息:cannot allocate memory.必须有更有效的方法来rbind提高效率 - 任何人都有他们想要分享的最喜欢的技巧吗?例如,我在doc中找到了这个例子sqldf:

# rbind
a7r <- rbind(a5r, a6r)
a7s <- sqldf("select * from a5s union all select * from a6s")
Run Code Online (Sandbox Code Playgroud)

这是最佳/推荐的方式吗?

更新 我使用上面调用中的关键dbname = tempfile()参数使其工作sqldf,正如JD Long在他对这个问题的回答中所建议的那样

memory memory-management r sqldf data.table

19
推荐指数
2
解决办法
1万
查看次数

一起使用sqldf和RPostgreSQL

使用时RPostgreSQL我发现我不能sqldf以同样的方式使用.例如,如果我使用以下代码加载库并将数据读入数据框:

library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host="localhost", user="postgres", password="xxx", dbname="yyy", port="5436")
rs <- dbSendQuery(con, "select * from table");                           
df<- fetch(rs, n = -1); dbClearResult(rs) 
dbDisconnect(con) 
Run Code Online (Sandbox Code Playgroud)

我知道在数据帧中有这个表的内容df.但是,如果我想使用sqldf我以前执行的命令运行SQL命令:

sqldf("SELECT * FROM df WHERE X > 10")
Run Code Online (Sandbox Code Playgroud)

这不再有效,因为我收到错误消息:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect postgres@localhost on dbname "test"
)
Error in !dbPreExists : invalid argument type
Run Code Online (Sandbox Code Playgroud)

我认为这是我操作员的错误,但我无法确定如何提供哪些参数,sqldf以便它只关注数据框并且不会尝试连接到其他任何东西.

sql postgresql r sqldf rpostgresql

14
推荐指数
2
解决办法
1万
查看次数

R中类似SQL的功能

我习惯在SQL写数据操作的逻辑,现在我正在学习RI发现自己有时只是想要做的东西,会在SQL简单,但我必须要学会为R一堆东西做在R相同的操作数据框.有简单的工作吗?

sql r sqldf

12
推荐指数
2
解决办法
6972
查看次数

错误:无法将NA传递给R中sqldf包中的dbQuoteIdentifier()

Error: Cannot pass NA to dbQuoteIdentifier()
Run Code Online (Sandbox Code Playgroud)

另外:警告信息:

In field_types[] <- field_types[names(data)] :
  number of items to replace is not a multiple of replacement length
Run Code Online (Sandbox Code Playgroud)

这是我今天试图用sqldf包运行任何东西的错误信息.昨天运行的相同查询今天没有运行,我做错了什么?

r sqldf

11
推荐指数
2
解决办法
4972
查看次数

如何将R变量传递给sqldf?

我有一些像这样的查询:

sqldf("select TenScore from data where State_P = 'AndhraPradesh'")
Run Code Online (Sandbox Code Playgroud)

但我有"AndhraPradesh"一个变量stateValue.如何在R中的选择查询中使用此变量以获得与上面相同的结果.

请告诉我语法.

r sqldf

10
推荐指数
2
解决办法
6287
查看次数

sqldf:将时间戳从本地时间更改为GMT/UTC

在我的机器上,sqldf将POSIXct从本地时间(我在CST,GMT -0600)更改为GMT/UTC.这是预期的行为吗?我可以阻止R或sqldf这样做吗?这是我的代码:

> library('sqldf')
> 
> before <- data.frame(ct_sys = Sys.time())
> before
               ct_sys
1 2012-03-01 12:57:58
> after <- sqldf('select * from before')
> after
               ct_sys
1 2012-03-01 18:57:58
> 
Run Code Online (Sandbox Code Playgroud)

r sqldf

9
推荐指数
1
解决办法
640
查看次数

在r中使用sqldf时无法连接数据库

我将一个csv文件加载到我的R中,当我尝试使用sqldf选择一些列时,它总是去

Error in .local(drv, ...) : 
  Failed to connect to database: Error: Access denied for user 
  'User'@'localhost' (using password: NO)
Error in !dbPreExists : invalid argument type
Run Code Online (Sandbox Code Playgroud)

我不知道如何解决它.

这是我的脚本:

library("RMySQL")
library(sqldf)
acs<-read.csv("getdata_data_ss06pid.csv",head = T)
sqldf("select pwgtp1 from acs where AGEP < 50")
Run Code Online (Sandbox Code Playgroud)

r sqldf

9
推荐指数
2
解决办法
8773
查看次数