如果我试图得到的平均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中)完成?
我的目标是采用'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) 我需要使用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]])出错:需要显式单位进行数值转换
我该如何解决?谢谢
我有一个包含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.
我有一个数据框,其中一些列名称的格式为 . 格式。例如: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 中有两个数据框,我想有条件地将它们合并到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) 我有这样的数据集:
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
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)
这有什么解决方法吗?
马尼什
我使用下面的调用根据不等式条件“加入”我的数据集:
library(sqldf)
sqldf("select *
from dataset1 a,
dataset2 b
a.col1 <= b.col2")
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法可以在没有sqldf 的情况下做到这一点?
到目前为止,我只能看到基于特定公共列上的简单联接的合并函数。
谢谢!
我有一个有两列的表
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)