Dataframe 为每个姓名添加2000-2008年期间缺失的所有月份
例如:Dataframe 为每个姓名添加2000-2008年期间缺失的所有月份,dataframe,Dataframe,例如: data <- data.frame(Name = c(rep("A",25), rep("B",50)), Date = seq(as.Date("2018-01-01"), as.Date("2020-01-12"), by = 10), C1 = rep(c(100,NA,NA,NA,NA,500,320,102,412,NA,200,NA,145,800,230),5), C2 = r
data <- data.frame(Name = c(rep("A",25), rep("B",50)),
Date = seq(as.Date("2018-01-01"), as.Date("2020-01-12"), by = 10),
C1 = rep(c(100,NA,NA,NA,NA,500,320,102,412,NA,200,NA,145,800,230),5),
C2 = rep(c(100,NA,NA,NA,NA,500,320,102,412,NA,200,NA,145,800,230),5)*2)
数据您可以使用tidyr::complete
确保将2000-2008年的每个月都包含在您的数据中
解决办法可以是:
library(tidyverse)
library(lubridate)
df %>% mutate(Date = ymd(Date), C2 = C1*2) %>%
group_by(Name, YearMon = format(Date, "%Y-%m")) %>%
summarise_at(vars(starts_with("C")), median, na.rm=TRUE) %>%
complete(YearMon =
format(seq(ymd("2001-01-01"), ymd("2008-12-31"), by="1 month"),"%Y-%m")) %>%
as.data.frame()
# Name YearMon C1 C2
# 1 A 2001-01 NA NA
# 2 A 2001-02 NA NA
# 3 A 2001-03 NA NA
# 4 A 2001-04 NA NA
# 5 A 2001-05 NA NA
# .............
# .............
# 180 B 2007-12 NA NA
# 181 B 2008-01 4 8
# 182 B 2008-02 11 22
# 183 B 2008-03 13 26
# ............
# ..............
您可以使用tidyr::complete
确保在您的数据中包含从2000年到2008年的每个月
解决办法可以是:
library(tidyverse)
library(lubridate)
df %>% mutate(Date = ymd(Date), C2 = C1*2) %>%
group_by(Name, YearMon = format(Date, "%Y-%m")) %>%
summarise_at(vars(starts_with("C")), median, na.rm=TRUE) %>%
complete(YearMon =
format(seq(ymd("2001-01-01"), ymd("2008-12-31"), by="1 month"),"%Y-%m")) %>%
as.data.frame()
# Name YearMon C1 C2
# 1 A 2001-01 NA NA
# 2 A 2001-02 NA NA
# 3 A 2001-03 NA NA
# 4 A 2001-04 NA NA
# 5 A 2001-05 NA NA
# .............
# .............
# 180 B 2007-12 NA NA
# 181 B 2008-01 4 8
# 182 B 2008-02 11 22
# 183 B 2008-03 13 26
# ............
# ..............