首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将SQL代码转换为R代码?

是否可以将SQL代码转换为R代码?
EN

Stack Overflow用户
提问于 2020-04-09 12:46:59
回答 3查看 54关注 0票数 0

我遇到了以下问题:我得到了一个数据库,必须对一些Delta进行评估,例如,我已经用SQL计算了这个问题,它运行得很好,但是现在我需要用R来尝试它,而且我对R不太好,所以我不太确定我的问题是否可以用R来解决。最好的情况是,如果我能够将我的sql代码转换成R代码。否则我会向你提出我的问题:

代码语言:javascript
复制
+----+------+------------+
| a  |  b   |     c      |
+----+------+------------+
| 10 |    2 | 31.01.2020 |
| 11 |    5 | 31.01.2020 |
| 10 |    3 | 31.01.2020 |
| 10 |    2 | 31.12.2019 |
| 11 |    4 | 31.12.2019 |
| 10 |   2  | 31.12.2019 |
+----+------+------------+

dput:

代码语言:javascript
复制
structure(list(a = c(10L, 11L, 10L, 10L, 11L, 10L), b = c(2L, 
5L, 3L, 2L, 4L, 2L), c = c("31.01.2020", "31.01.2020", "31.01.2020", 
"31.12.2019", "31.12.2019", "31.12.2019")), row.names = c(NA, 
-6L), class = "data.frame")

三角洲

代码语言:javascript
复制
+----+---+
| 10 | 1 |
| 11 | 1 |
+----+---+

这是我第一次在这个社区,所以我希望你能看到我的照片。这是我问题的一个例子:

在第一步中,我需要对同一日期(c)和a中相同编号的B栏进行总结。因此,2020年12月31日的结果将是: 10= 5和11= 5,而2019年12月31日相同。

在此之前,它可以工作,但在下一步中,我需要计算b) s.t的增量。( a)和( c)栏)

换句话说,对于a中的数字10,我在2019年12月31日计算了31.01.2020年的5次,我计算了10次,现在我不得不计算5-4,但我不可能对它进行编程。

因此,我希望你们中的一些人能理解我的问题,并能帮助我找到一个聪明的方法,我可以解决这个问题。

如果你能帮我,我会非常感激的。

EN

回答 3

Stack Overflow用户

发布于 2020-04-09 13:15:48

您可以使用data.table来完成这个任务。首先将c转换为日期列。

然后根据每个b组取(a, c)之和,然后在结果表的a组中,取该和的diffdiff将朝着正确的方向前进,因为keyby按分组列排序结果。

代码语言:javascript
复制
library(data.table)
setDT(df)
df[, c := as.Date(c, format = '%d.%m.%Y')]

df[, .(bsum = sum(b)), keyby = .(a, c)
  ][, .(bsum_diff = diff(bsum)), by = a]
#     a bsum_diff
# 1: 10         1
# 2: 11         1
票数 1
EN

Stack Overflow用户

发布于 2020-04-09 13:30:19

使用包dplyr,尝试如下所示:

代码语言:javascript
复制
library(dplyr)

df %>%
  mutate(c_date = as.Date(c, format = "%d.%m.%Y")) %>% # convert to a Date in R
  group_by(a, c_date) %>% 
  summarize(b = sum(b)) %>% # sum grouped by a and c
  group_by(a) %>%
  arrange(c_date) %>% # sort on the date
  summarize(delta = diff(b)) # take the difference, grouped on a

这将使:

代码语言:javascript
复制
# A tibble: 2 x 2
      a delta
  <int> <int>
1    10     1
2    11     1
票数 1
EN

Stack Overflow用户

发布于 2020-04-09 13:13:31

我不知道是否可以将SQL转换成R代码,但是通过R处理数据库并不困难。从总体上看:您需要设置一个SQL连接: DBI::dbconnect()。接下来,使用函数tbl()和包dplyr开始复制select语句。在这里您可以找到更多信息:https://db.rstudio.com

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61121513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档