我有一个这样的数据框:
df <- data.frame(date= c("2011-11-01", "2011-11-01", "2011-11-01", "2011-11-01"),
reference_year=c(2011, 2012, 2013, 2014),
mean=c(6.49, 5.55, 5.05, 4.87))
因此,我希望在日期(2011年)等于日期年份+ 1(2012年)的情况下创建具有均值的新数据框架。
使用Stata我只使用这段代码:
gen eventtime=date(date, "YMD")
gen day=day(eventtime)
gen month=month(eventtime)
gen yr=year(eventtime)
keep if reference_year == yr+1
collapse (first) mean date, by(eventtime)
但是,作为R初学者,我想在R做。
作为R初学者,以下内容可能没有多大意义。但基本上,我将date
变量分成3个变量(year
,month
,day
)然后我过滤到reference_year - 1
。 %>%
被称为“管道”,可以读作“然后执行此操作”。
library(tidyverse)
df <- data.frame(date= c("2011-11-01", "2011-11-01", "2011-11-01", "2011-11-01"),
reference_year=c(2011, 2012, 2013, 2014),
mean=c(6.49, 5.55, 5.05, 4.87))
new_df <- df %>%
separate(date, c("year", "month", "day"), sep = "-") %>%
filter(year == (reference_year - 1))
#> year month day reference_year mean
#> 1 2011 11 01 2012 5.55