sqldf和RMySQL都是R包,允许访问MySQL数据库(前者使用后者).它们都允许这样的语句:
RMySQL:"运行任意SQL语句并提取其所有输出(返回data.frame):"
dbGetQuery(con, "select count(*) from a_table")
dbGetQuery(con, "select * from a_table")
Run Code Online (Sandbox Code Playgroud)
sqldf:
library(sqldf)
sqldf("select * from iris limit 5")
sqldf("select count(*) from iris")
sqldf("select Species, count(*) from iris group by Species")
# create a data frame
DF <- data.frame(a = 1:5, b = letters[1:5])
Run Code Online (Sandbox Code Playgroud)
那有什么区别?sqldf提供的RMySQL没有提供什么?
我有两个数据帧,这是第一个:
df <- data.frame(p=letters[1:3],y1=c(2,4,3))
df
p y1
1 a 2
2 b 4
3 c 3
Run Code Online (Sandbox Code Playgroud)
第二个:
df2 <- data.frame(p=rep(letters[1:3],c(3,2,4)),y2=c(3,1,1,4,3,4,3,3,1),d=rep(1,length=9))
df2
p y2 d
1 a 3 1
2 a 1 1
3 a 1 1
4 b 4 1
5 b 3 1
6 c 4 1
7 c 3 1
8 c 3 1
9 c 1 1
Run Code Online (Sandbox Code Playgroud)
我想要做的是获取这些行df2,其中p(a,b,c等)的每个值在哪里d=1(在这种情况下是所有行),y2大于y1按pin 分组df.
因为这个原因也许是没有意义的,需要两条线被踢:第1行中df2 …
我有一个矢量限制,有一个分数的限制:
[1] 0.000000 7.025894 9.871630 12.411131 15.155998 18.099176 21.431354 25.391163 30.616550 40.356630
Run Code Online (Sandbox Code Playgroud)
我创建了一个表来对其他客户进行分类:
lims[1]<- -0.00001
a<-data.frame(lims[2:10])
colnames(a)<-'maxSc'
a<-rbind(a, 100)
lims<-data.frame(lims)
lims$maxSc<-a
colnames(lims)<-c('minSc', 'maxSc')
> class(lims)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)
所以我的结果是:
> lims
minSc maxSc
1 -0.000010 7.025894
2 7.025894 9.871630
3 9.871630 12.411131
4 12.411131 15.155998
5 15.155998 18.099176
6 18.099176 21.431354
7 21.431354 25.391163
8 25.391163 30.616550
9 30.616550 40.356630
10 40.356630 100.000000
Run Code Online (Sandbox Code Playgroud)
我想根据这些限制和字段sc对另一个表(火车)进行分类:
>class(train$sc)
[1] "numeric"
> class(train$target)
[1] "integer"
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下操作时出现错误:
library(sqldf)
sqldf("Select b.minSc, b.maxSc, count(*) as total, sum(target) as …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SQLDF 函数从日期字段中提取年份。我希望 SQL 的 DATEPART 能够工作,但可惜我需要使用 STRFTIME 来代替(我认为)。当我应用代码时,我在 YYYY 下得到 NA。我的代码如下:
dw_Calendar = read.csv("C:\dw_Calendar.csv")
# ensure that the date field is in a date format
dw_Calendar$newDate <- as.Date(dw_Calendar$FullDate)
CalendarSum <- sqldf("
select newDate,
strftime('%U', newDate) as YYYY
from dw_Calendar
")
Run Code Online (Sandbox Code Playgroud) 我想在R中使用sqldf进行循环查询,以选择日期为“ 11/12/2015”且在9AM的所有非NULL X.1变量。范例:
StartDate X.1
11/12/2015 09:14 A
11/12/2015 09:36
11/12/2015 09:54 A
Run Code Online (Sandbox Code Playgroud)
日期在从其他查询生成的变量中
nullob<-0
dayminnull<-as.numeric(sqldf("SELECT substr(Min(StartDate),1,03)as hari from testes")) # this produce "11/12/2015"
for (i in 1 : 12){
dday<-mdy(dayminnull)+days(i) #go to next day
sqlsql <- sprintf("SELECT count([X.1]) FROM testes where StartDate like '% \%s 09: %'", dday)
x[i]<-sqldf(sqlsql)
nullob<-nullob+x[i]
}
Run Code Online (Sandbox Code Playgroud)
它带有错误:sprintf(“ SELECT count([X.1])from Testes WHERE StartDate like'%% s 09%'”中的错误,:无法识别的格式规范'%'请打扰。
我在R中使用SQLDF.我从第2列和第3列计算两个不同的值.我想计算第2列/第3列,但结果始终为零.为什么?
这是我的代码:
prouterInboundin4hours<-sqldf(
" select `1st Segment Delivered Success Day`, count (DISTINCT case when
`Inbound Lead Time (hour)` < 4 then `First segment Order Number` END)
as 'Inbound< 4 hours Volume',
count (`First segment Order Number`) as 'Delivered Success Volume',
count (DISTINCT case when `Inbound Lead Time (hour)` < 4 then `First
segment Order Number` END) / count (`First segment Order Number`)
from prouter
where Year ='Year2017'
group by `1st Segment Delivered Success Day`
"
)
Run Code Online (Sandbox Code Playgroud)
结果是:
我正在尝试使用SQLDF在R中运行sql查询,但它一直返回错误:rsqlite_send_query(conn @ ptr,statement)中的错误:无此类列:NA。
查询如下所示:
sqldf(“选择ID,电话号码,从sdi_update_2输入,其中类型= NA限制20”)
任何帮助将不胜感激。
谢谢
我有下表lc:
a b c d
co NA co 1
co NA co 84
us co us 6
NA co NA 54
us NA NA 4
Run Code Online (Sandbox Code Playgroud)
还有另一张桌子 ro
d value
bb 1
co 0.5
mn 0.03
us 2
Run Code Online (Sandbox Code Playgroud)
我想lc使用中的值更新其中的值ro以获取以下内容:
a b c d
0.5 NA 0.5 1
0.5 NA 0.5 84
2 0.5 2 6
NA 0.5 NA 54
2 NA NA 4
Run Code Online (Sandbox Code Playgroud)
我有代码:
lc <- sqldf(c("UPDATE lc SET a = (SELECT ro.value FROM ro …Run Code Online (Sandbox Code Playgroud) 我试图使用下面的代码选择除前2000行以外的所有行,但是我收到以下错误.
new_table = sqldf("select units, count(*)
from old_table
group by units
where count(*) > 2000")
Error in sqliteExecStatement(con, statement, bind.data) :
RS-DBI driver: (error in statement: near "where": syntax error)
Run Code Online (Sandbox Code Playgroud) 我有一个只有一列的数据框。有 10 行。
(4.0 * 3.0)
(4.0 * 3.0)
(2.0 * (1.0 * (1.0 * 6.0)))
(4.0 * (3.0 * 1.0))
(6.0 * 2.0)
(6.0 * 2.0)
(2.0 * 6.0)
(2.0 * 6.0)
(2.0 * 6.0)
(6.0 * 2.0)
Run Code Online (Sandbox Code Playgroud)
我需要提取列中的唯一值及其出现的次数。使用 sqldf 包我能够获得唯一的值。但不是计数。
询问:
sqldf("SELECT V1, COUNT(DISTINCT V1) as DinctC from dataset GROUP BY V1")
Run Code Online (Sandbox Code Playgroud)
输出:
V1 DinctC
1 (2.0 * (1.0 * (1.0 * 6.0))) 1
2 (2.0 * 6.0) 1
3 (4.0 * (3.0 * 1.0)) 1
4 (4.0 …Run Code Online (Sandbox Code Playgroud) sessionInfo()
R版本3.4.1(2017-06-30)平台:x86_64-pc-linux-gnu(64位)运行于:Ubuntu 16.04.3 LTS
Matrix产品:默认BLAS:/home/roughmar/anaconda3/lib/R/lib/libRblas.so LAPACK:/home/roughmar/anaconda3/lib/R/lib/libRlapack.so
locale:[1] LC_CTYPE = en_US.UTF-8 LC_NUMERIC = C
[3] LC_TIME = en_IE.UTF-8 LC_COLLATE = en_US.UTF-8 [5] LC_MONETARY = en_IE.UTF-8 LC_MESSAGES = en_US.UTF-8 [ 7] LC_PAPER = en_IE.UTF-8 LC_NAME = C [9] LC_ADDRESS = C LC_TELEPHONE = C [11] LC_MEASUREMENT = en_IE.UTF-8 LC_IDENTIFICATION = C附加基础包:[1] stats graphics grDevices utils
数据集方法库通过命名空间加载(而不是附加):[1] compiler_3.4.1 R6_2.2.1 magrittr_1.5 IRdisplay_0.4.4 [5] pbdZMQ_0.2-6
tools_3.4.1 crayon_1.3.2 uuid_0.1-2 [9] stringi_1.1.5
IRkernel_0.7.1 jsonlite_1.5 stringr_1.2.0 [13] digest_0.6.12
repr_0.10 evaluate_0.10
每当我加载sqldf库时,我都会遇到:
加载所需的包:gsubfn
加载所需的包:proto
无法加载tcltk.将使用较慢的R代码.
加载所需的包:RSQLite
我编写的任何sqldf查询运行完美,结果如预期.当我在表达式上犯错误时,问题就会出现,例如额外的逗号,或者误导变量,或者你可能会想到通常会输出错误的任何内容. …
我试图在dplyr中进行过滤,其中列就像某些观察一样.我可以使用sqldf作为
Test <- sqldf("select * from database
Where SOURCE LIKE '%ALPHA%'
OR SOURCE LIKE '%BETA%'
OR SOURCE LIKE '%GAMMA%'")
Run Code Online (Sandbox Code Playgroud)
我试图使用以下不会返回任何结果:
database %>% dplyr::filter(SOURCE %like% c('%ALPHA%', '%BETA%', '%GAMMA%'))
Run Code Online (Sandbox Code Playgroud)
谢谢
我可以用sqldf包来计算"avg""count"和"sum".我能定义自己的标准偏差函数吗?
我真的有必要使用sqldf来计算标准偏差.
r ×13
sqldf ×13
anaconda ×1
count ×1
data.table ×1
dataframe ×1
dplyr ×1
for-loop ×1
na ×1
plyr ×1
printf ×1
rmysql ×1
sql ×1
sql-server ×1
sql-update ×1
sqldatatypes ×1
sqlite ×1
strftime ×1
ubuntu-16.04 ×1