我希望通过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))
鉴于此data.frame,如何通过app_name和&获取计数的滞后差异。 VERSION_ID?每个应用程序的初始(第一个)版本差异将为零,因为没有区别。
以下是最终结果与最终'diff'列
相似的示例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))
答案 0 :(得分:1)
尝试使用dplyr
和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
答案 1 :(得分:0)
我们可以使用<% @user.discipleship_classes.each do |d_class|%>
<%= d_class.class.name%>
<%= d_class.some_intrinsic_detail_of_discipleship%>
<% end %>
。我们转换了&#39; data.frame&#39;到&#39; data.table&#39; (data.table
),按&#39; app_name&#39;分组,循环(setDT(data)
)lapply(..
中指定的列,获取当前元素与其{{1}之间的差异(.SDcols
默认情况下为lag
)并指定(shift
)输出以创建新列。
type='lag'