我遇到了以下问题:我有一个数据库,必须评估一些增量,例如我已经用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,但是我无法对其进行编程。
所以我希望你们中的一些人理解我的问题,并可以帮助我找到解决问题的聪明方法。
如果您能帮助我,我将非常感谢。
答案 0 :(得分:1)
您可以使用data.table执行此操作。首先将c
转换为日期列。
然后,按每个b
组取(a, c)
的总和,然后在结果表的a
组内,取此总和的diff
。 diff
的方向正确,因为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