我想计算两个月之间的差异,例如:
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)
但是无法弄清楚如何编写这个函数,有帮助吗?
答案 0 :(得分:3)
假设数据集按Month
和day
使用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]