标签: sqldf

使用sqldf的NA值

如果我试图得到的平均c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10)使用AVG从SQL,我得到的不是预期的6.5的5.2的值.

# prepare data and write to file
write.table(data.frame(col1 = c(NA, NA, 3:10)),
        "my.na.txt", row.names = FALSE)

mean(c(NA, NA, 3:10), na.rm = TRUE) # 6.5

my.na <- read.csv.sql("my.na.txt", sep = " ",
        sql = "SELECT AVG(col1) FROM file") # 5.2

# this is identical to
sum(3:10)/10

unlink("my.na.txt") # remove file
Run Code Online (Sandbox Code Playgroud)

这让我相信sql(df)将NA值视为零.是否可以在SQL调用中忽略(排除)NA值,因为它可以使用na.rm参数(在R中)完成?

sql r sqldf

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

SQLDF在R中的左连接

我的目标是采用'matr',按列c1对其进行排序,并保持唯一(c1),其中c2 = 1.例如,从此代码中...

c1 = c("a",'a','a','b','b','b','b','c','c')
c2 = c(1,1,0,1,1,0,1,0,0)
matr = as.data.frame(cbind(c1,c2))    
one = sqldf('select distinct(c1),c2 from matr where c2 = 1')    
vs = sqldf('select distinct(c1),c0,c2 from matr group by c1')
sqldf('select matr.*,one.* from matr 
  left outer join one 
  where one.c1 = matr.c1')
Run Code Online (Sandbox Code Playgroud)

到达:

c1 c2
a  1
b  1
c  0
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我在左连接中丢失了行c.我只能到达(通过其他联接)

c1 c2
a  1
b  1
Run Code Online (Sandbox Code Playgroud)

r left-join sqldf

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

R-sqldf -need显式单位用于数字转换

我需要使用Date字段连接2个表

> class(pagos$pseudo_1mes)
[1] "Date"
>  class(pseudo_meses$pseudo_1mes)
[1] "Date"
Run Code Online (Sandbox Code Playgroud)

我的代码是:

library(sqldf)

pagos<-sqldf("select a.*, b.mes_atras from pagos a 
        left join pseudo_meses b
      on a.pseudo_1mes=b.pseudo_1mes")
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,没有结果:

asfn(rs [[i]])出错:需要显式单位进行数值转换

我该如何解决?谢谢

r sqldf

4
推荐指数
3
解决办法
4568
查看次数

sqldf中按组累计的金额?

我有一个包含3个变量的数据框:地点,时间和值(P,T,X).我想创建一个第四个变量,它将是X的累积和.通常我喜欢用分组计算sqldf,但似乎找不到相应的cumsum.那是:

sqldf("select P,T,X, cumsum(X) as X_CUM from df group by P,T") 
Run Code Online (Sandbox Code Playgroud)

不起作用.这有可能sqldf吗?我试过了doBy,但这也不是全部cumsum.

r sqldf

3
推荐指数
1
解决办法
9004
查看次数

如何处理R中sqldf不支持的列名

我有一个数据框,其中一些列名称的格式为 . 格式。例如:Company.1 当我在 sqldf 函数中使用该列时,它会抛出错误

data=sqldf(select Company.1 from test)
Error in sqliteExecStatement(con, statement, bind.data) : 
RS-DBI driver: (error in statement: near ".1": syntax error)
Run Code Online (Sandbox Code Playgroud)

有什么解决方法可以让我可以按原样使用列名称吗?

r sqldf

3
推荐指数
1
解决办法
7333
查看次数

带有 WHERE 和 HAVING 子句的 sqldf 中的 LEFT OUTER JOIN

我在 R 中有两个数据框,我想有条件地将它们合并到id和 上day。合并是right合并到left变量的变量尽可能是新的/新鲜的/最近的,但必须至少是三天前的。

但是,如果没有匹配的right,以我的id-date在对left我还是想留住他们。我的研究有两个部分,所以我不想放弃的id-day意见,只是因为他们是不完整的。

我可以sqldf一步完成吗?我目前的方法需要一个额外的基础 R merge

left <- data.frame(id=rep(1:5, each=10),
                   day=rep(1:10, times=5),
                   x=rnorm(5*10))
right <- data.frame(id=rep(1:2, each=21),
                   day=rep(-10:10, times=2),
                   y=rnorm(2*21))
combined <- sqldf("SELECT L.id, L.day, L.x, R.y
                  FROM left L LEFT OUTER JOIN right R
                  ON (L.id = R.id)
                  WHERE ((L.day - R.day) >= 3)
                  GROUP BY L.id, L.day
                  HAVING (R.day = MAX(R.day))")
combined                  

combined.2 …
Run Code Online (Sandbox Code Playgroud)

r sqldf

3
推荐指数
1
解决办法
3331
查看次数

如何在R SQLDF中聚合字符串?

我有这样的数据集:

DEPTNO ENAME
   10 CLARK
   10 KING
   10 MILLER
   20 ADAMS
   20 FORD
   20 JONES
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建这样的结果:

DEPTNO AGGREGATED_ENAMES
   10 CLARK,KING,MILLER
   20 ADAMS,FORD,JONES
Run Code Online (Sandbox Code Playgroud)

在Oracle中,这可以通过以下方式完成:

SQL> SELECT deptno
    ,LISTAGG(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
   FROM   emp
   GROUP  BY
   deptno;
Run Code Online (Sandbox Code Playgroud)

我怎么能SQLDF在R中做到这一点?

或者如果在R中不可能,SQLDF我怎么能在R中做到?

谢谢!PARTH

r aggregate-functions sqldf

3
推荐指数
1
解决办法
1820
查看次数

使用SQLDF的示例行

sqldf有一个限制选项来获取'X'行.我们还可以使用sqldf进行'x%'样本吗?

例如

> sqldf("select * from iris limit 3")

Loading required package: tcltk
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa

> sqldf("select * from iris sample 0.01")
Error in sqliteSendQuery(con, statement, bind.data) : 
  error in statement: near ".1": syntax error
Run Code Online (Sandbox Code Playgroud)

这有什么解决方法吗?

马尼什

r sample sqldf

3
推荐指数
1
解决办法
2029
查看次数

根据不等式条件连接两个数据集

我使用下面的调用根据不等式条件“加入”我的数据集:

library(sqldf)

sqldf("select *
from dataset1 a,
dataset2 b
a.col1 <= b.col2")
Run Code Online (Sandbox Code Playgroud)

但是,有没有办法可以在没有sqldf 的情况下做到这一点?

到目前为止,我只能看到基于特定公共列上的简单联接的合并函数。

谢谢!

merge join r dataset sqldf

3
推荐指数
1
解决办法
5753
查看次数

计算客户之间共享的订单数量

我有一个有两列的表

Order | CustomerID

 1. A | C1 
 2. B | C1 
 3. C | C1 
 4. D | C2 
 5. B | C3 
 6. C | C3
 7. D | C4
Run Code Online (Sandbox Code Playgroud)

它是一张很长的桌子.我想要一个显示的输出

C1 | C3 | 2  #Customer C1 and Customer C3 share 2 orders (i.e. orders, B & C) 
C1 | C2 | 0   #Customer C1 and Customer C2 share 0 orders 
C2 | C4 | 1   #Customer C2 and Customer C4 share 1 orders (i.e. order, D) …
Run Code Online (Sandbox Code Playgroud)

sql r plyr sqldf dplyr

3
推荐指数
1
解决办法
92
查看次数

标签 统计

r ×10

sqldf ×10

sql ×2

aggregate-functions ×1

dataset ×1

dplyr ×1

join ×1

left-join ×1

merge ×1

plyr ×1

sample ×1