R:在R中按类别计算行差异

时间:2014-09-17 15:47:57

标签: r

我想计算两个月之间的差异,例如:

attach(airquality)
head(airquality)

  Ozone Solar.R Wind Temp Month Day
1    41     190  7.4   67     5   1
2    36     118  8.0   72     5   2
3    12     149 12.6   74     5   3
4    18     313 11.5   62     5   4
5    NA      NA 14.3   56     5   5
6    28      NA 14.9   66     5   6

我的输出如下:

Month Day  temp_diff
5     1      5
5     2      2
5     3      -12

计算将在每个月的最后一天停止,例如对于May31,它不会通过减去6月1日的临时值和5月31日的临时值来计算temp_diff。

在计算之前,我需要按月和按日订购数据,以便正确计算。

我在考虑使用:by(airquality[,1:4],Month,function)但是无法弄清楚如何编写这个函数,有帮助吗?

1 个答案:

答案 0 :(得分:3)

假设数据集按Monthday

排序

使用dplyr

library(dplyr)

 airquality %>%
 group_by(Month) %>% 
 arrange(Month, Day) %>% #if not ordered
 mutate(temp_diff=c(diff(Temp),NA)) %>%
 select(Month, Day, temp_diff)%>%
 head()

 #      Month Day temp_diff
 #1     5   1         5
 #2     5   2         2
 #3     5   3       -12
 #4     5   4        -6
 #5     5   5        10
 #6     5   6        -1

或使用base R

airquality$temp_diff <- with(airquality, ave(Temp, Month,
                          FUN=function(x) c(diff(x), NA)))

或使用data.table

library(data.table)
 DT <- setDT(airquality)[, temp_diff:=c(diff(Temp),NA), by=Month]