R dplyr 历史最大值
R dplyr historic maxima
我在这个例子中使用了创建每个季节的最高温度。此外,我现在试图包括一个额外的列,为每一行显示该特定年份冬季的历史最高温度(例如,2001 年冬季的 2001 年冬季值、2002 年冬季的 2002 年冬季值等.).
我可以通过在 dplyr
外进行子集化和合并来解决这个问题,但我想知道是否有一种方法可以在 dplyr
内优雅地做到这一点?
library(dplyr)
library(zoo)
library(DataCombine)
df = expand.grid(year = 2000:2003,
season = c("spring","summer","fall","winter"),
month=1:3)
df$temp = rpois(dim(df)[1], 5) # temperature
df2 = df %>%
group_by(year, season) %>%
summarise(max_temp=max(temp))
你可以试试
library(dplyr)
df %>%
group_by(year) %>%
mutate(max_temp = max(temp[season=='winter']))
或使用 left_join
的选项
left_join(df,
df %>%
filter(season=='winter') %>%
group_by(year) %>%
summarise(max_temp=max(temp)))
带有 data.table
的紧凑选项是
library(data.table)
setDT(df)[, max_temp := max(temp[season=='winter']) ,year][]
我在这个例子中使用了创建每个季节的最高温度。此外,我现在试图包括一个额外的列,为每一行显示该特定年份冬季的历史最高温度(例如,2001 年冬季的 2001 年冬季值、2002 年冬季的 2002 年冬季值等.).
我可以通过在 dplyr
外进行子集化和合并来解决这个问题,但我想知道是否有一种方法可以在 dplyr
内优雅地做到这一点?
library(dplyr)
library(zoo)
library(DataCombine)
df = expand.grid(year = 2000:2003,
season = c("spring","summer","fall","winter"),
month=1:3)
df$temp = rpois(dim(df)[1], 5) # temperature
df2 = df %>%
group_by(year, season) %>%
summarise(max_temp=max(temp))
你可以试试
library(dplyr)
df %>%
group_by(year) %>%
mutate(max_temp = max(temp[season=='winter']))
或使用 left_join
left_join(df,
df %>%
filter(season=='winter') %>%
group_by(year) %>%
summarise(max_temp=max(temp)))
带有 data.table
的紧凑选项是
library(data.table)
setDT(df)[, max_temp := max(temp[season=='winter']) ,year][]