我有一个像这样的数据框:
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中这样做。
答案 0 :(得分:2)
作为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