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

时间:2020-04-09 12:46:59

标签: r database evaluation

我遇到了以下问题:我有一个数据库,必须评估一些增量,例如我已经用SQL计算出了它,并且效果很好,但是现在我需要用R尝试一下,而我并没有在R上做很多工作,所以我不太确定我的问题是否可以用R解决。我的SQL代码到R代码。否则,我会向您介绍我的问题:

+----+------+------------+
| 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:

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")

增量

+----+---+
| 10 | 1 |
| 11 | 1 |
+----+---+

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

在第一步中,我需要汇总日期相同的日期(c)和a)中相同数字的b列。因此,2020年12月31日的结果将是:10 = 5和11 = 5,与31.12.2019的结果相同。

直到这一点它都起作用,但是在下一步中,我需要计算b)s.t的增量。栏a)和c)

换句话说:对于a)中的数字10,我在2019年12月31日的31.01.2020中计算了5,我计算了10的4.现在我必须计算5-4,但是我无法对其进行编程。

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

如果您能帮助我,我将非常感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用data.table执行此操作。首先将c转换为日期列。

然后,按每个b组取(a, c)的总和,然后在结果表的a组内,取此总和的diffdiff的方向正确,因为keyby通过分组列对结果进行排序。

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 :(得分:1)

使用软件包dplyr,尝试执行以下操作:

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

哪个会给:

# A tibble: 2 x 2
      a delta
  <int> <int>
1    10     1
2    11     1

答案 2 :(得分:0)

我不知道是否可以将SQL转换为R代码,但是通过R使用数据库并不难。大图:您需要设置一个SQL连接:DBI :: dbconnect()。接下来,使用功能tbl()和软件包dplyr,您开始复制sql select语句。在这里您可以找到更多信息:https://db.rstudio.com

相关问题