这是我的一个df
(数据框):
group value
1 10
1 20
1 25
2 5
2 10
2 15
我需要按组计算相邻行之间的值的差异。
因此,我需要一个这样的结果。
group value diff
1 10 NA # because there is a no previous value
1 20 10 # value[2] - value[1]
1 25 5 # value[3] value[2]
2 5 NA # because group is changed
2 10 5 # value[5] - value[4]
2 15 5 # value[6] - value[5]
虽然我可以使用ddply
来处理这个问题,但它需要太多时间。这是因为我的df
中有很多组。(在我的df
中有超过1,000,000个组)
是否还有其他有效的方法来解决这个问题?
ddply(df, .(group), transform, diff=c(NA,diff(value)))
的东西。 - Blue Magisterperc_change <- function(x, y) { return(x/y*100) }
,那么我们可以像这样调用它:df[ , perc_diff := perc_change(value, shift(value)), by = group]
。 - srctahalibrary(dplyr)
,第二行:df$Diff <- as.data.frame((df %>% group_by(group) %>% mutate(Diff = value - lag(value)))[ , 3])
第三行:df$Diff[is.na(df$Diff)] <- unlist((df %>% group_by(group) %>%summarise(start.values = first(value)))[ , 2])
- InColorado