gpt4 book ai didi

R:为组和非组的组合创建一阶差分

转载 作者:行者123 更新时间:2023-12-02 15:27:27 24 4
gpt4 key购买 nike

我有这个 data.table,其中包含一些特定于组的数据和一些通用数据:

         group year      flow      agg
1: 51557094 2010 3.46000 592649.6
2: 51557133 1999 111.60000 522706.2
3: 51557133 2000 29.36000 555279.7
4: 51557133 2003 96.38000 592649.6
5: 51557193 2004 65.22000 550622.4

flow这里是group-year具体的,aggyear具体的。我想计算一阶差分:对于基于 groupflow,以及沿着 year 的一阶差分,对于 agg 没有分组,只是沿 year 进行一阶差分。

我更喜欢不包括 dplyr 的方法。

预期输出

         group year     dFlow      dAgg
1: 51557094 2010 NA NA
2: 51557133 1999 NA NA
3: 51557133 2000 -82.24 32573.5
4: 51557133 2003 NA NA
5: 51557193 2004 NA -42027.2

最佳答案

你可以试试

 library(data.table)
myDataTable[, ind:= 1:.N][order(year)][seq_len(.N) %in% 1:2,
dFlow:=c(NA, diff(flow)) , by = group][,
dAgg:= c(NA, diff(agg)), cumsum(c(TRUE, diff(year)!=1))][
order(ind)][,3:5 := NULL][]
# group year dFlow dAgg
#1: 51557094 2010 NA NA
#2: 51557133 1999 NA NA
#3: 51557133 2000 -82.24 32573.5
#4: 51557133 2003 NA NA
#5: 51557193 2004 NA -42027.2

数据

df2 <- structure(list(group = c(51557094L, 51557133L, 51557133L, 
51557133L,
51557193L), year = c(2010L, 1999L, 2000L, 2003L, 2004L),
flow = c(3.46,
111.6, 29.36, 96.38, 65.22), agg = c(592649.6, 522706.2, 555279.7,
592649.6, 550622.4)), .Names = c("group", "year", "flow", "agg"
), class = "data.frame", row.names = c("1:", "2:", "3:", "4:",
"5:"))

myDataTable <- as.data.table(df2)

关于R:为组和非组的组合创建一阶差分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com