Sup*_*ohn 3 diff r lag dataframe
我希望通过 app_name 获得不同版本的计数差异。我的数据集如下所示:app_name、version_id、count、[difference]
这是数据集
data = structure(list(app_name = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
2L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), version_id = c(1,
1.1, 2.3, 2, 3.1, 3.3, 4, 1.1, 2.4), count = c(600L, 620L, 620L,
200L, 200L, 250L, 250L, 15L, 36L)), .Names = c("app_name", "version_id",
"count"), class = "data.frame", row.names = c(NA, -9L))
Run Code Online (Sandbox Code Playgroud)
给定这个 data.frame,我如何获得 app_name 和 version_id 的计数滞后差异?每个应用程序的初始(第一个)版本差异将为零,因为没有差异。
以下是最终“差异”列的最终结果的示例
structure(list(app_name = structure(c(1L, 1L, 1L, 2L, 2L, 2L,
2L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), version_id = c(1,
1.1, 2.3, 2, 3.1, 3.3, 4, 1.1, 2.4), count = c(600L, 620L, 620L,
200L, 200L, 250L, 250L, 15L, 36L), diff = c(0, 20, 0, 0, 0, 1.25,
0, 0, 2.4)), .Names = c("app_name", "version_id", "count", "diff"
), class = "data.frame", row.names = c(NA, -9L))
Run Code Online (Sandbox Code Playgroud)
尝试使用dplyrand lag:
library(dplyr)
data %>% group_by(app_name) %>%
mutate(diffvers = version_id - dplyr::lag(version_id, default = version_id[1]),
diffcount = count - dplyr::lag(count, default = count[1]))
Source: local data frame [9 x 5]
Groups: app_name [3]
app_name version_id count diffvers diffcount
(fctr) (dbl) (int) (dbl) (int)
1 a 1.0 600 0.0 0
2 a 1.1 620 0.1 20
3 a 2.3 620 1.2 0
4 b 2.0 200 0.0 0
5 b 3.1 200 1.1 0
6 b 3.3 250 0.2 50
7 b 4.0 250 0.7 0
8 c 1.1 15 0.0 0
9 c 2.4 36 1.3 21
Run Code Online (Sandbox Code Playgroud)