如何使用“创建完整日期列”;年月;字符串并连接三个不同的数据帧,这些数据帧按R中的日期列排序

如何使用“创建完整日期列”;年月;字符串并连接三个不同的数据帧,这些数据帧按R中的日期列排序,r,datetime,dataframe,merge,R,Datetime,Dataframe,Merge,从2014年到2018年,我有三个数据框架——冬季、春季和夏季。冬季月份为1月、2月、11月、12月。从三月到六月的春天。7月至10月的夏季月份。我有所有季节所有月份的每日数据,但在“月\年”字符串中有日期列。我的问题是如何将“月\年”字符串转换为完整的日期格式“%Y-%m-%d” 我可以使用as.yearmon函数将“Month\u Year”转换为yearmon,然后使用as.date函数将其转换为日期。但是它会返回每个月的第一天 以下是miminum可复制示例: df1 <- dat

从2014年到2018年,我有三个数据框架——冬季、春季和夏季。冬季月份为1月、2月、11月、12月。从三月到六月的春天。7月至10月的夏季月份。我有所有季节所有月份的每日数据,但在“月\年”字符串中有日期列。我的问题是如何将“月\年”字符串转换为完整的日期格式“%Y-%m-%d”

我可以使用as.yearmon函数将“Month\u Year”转换为yearmon,然后使用as.date函数将其转换为日期。但是它会返回每个月的第一天

以下是miminum可复制示例:

df1 <- data.frame(rep("July_2014",31))
names(df1) <- 'date'
df1$fulldate <-  as.yearmon(df1$date, "%b_%Y") 
df1$fulldate_Date <- as.Date(as.yearmon(df1$fulldate, "%m-%Y"))

df1
make_seq
获取一个月的第一个日期,并输出一系列到月底的日期。使用
ave
应用它,并清除垃圾列
rbind
可用于从具有相同列名的多个数据帧中创建单个数据帧。列不应为因子,除非它们具有相同的级别

make_seq <- function(x) seq(x[1], as.Date(as.yearmon(x[1]), frac = 1), by = "day")
transform(df1, Date = ave(fulldate_Date, date, FUN = make_seq))[c("fulldate", "Date")]

make_seq
获取一个月的第一个日期,并输出一系列到月底的日期。使用
ave
应用它,并清除垃圾列
rbind
可用于从具有相同列名的多个数据帧中创建单个数据帧。列不应为因子,除非它们具有相同的级别

make_seq <- function(x) seq(x[1], as.Date(as.yearmon(x[1]), frac = 1), by = "day")
transform(df1, Date = ave(fulldate_Date, date, FUN = make_seq))[c("fulldate", "Date")]

下面是一个使用dplyr包的解决方案。它将序列号粘贴到“月\年”列上,然后将其转换为日期对象。这假设数据帧是按月份的日期按时间顺序排列的

#test data
df1 <- data.frame(month=c(rep("June_2014",30), rep("July_2014",31)))

library(dplyr)
#Paste day onto the month year
answer<- df1 %>% group_by(month) %>% mutate(date = paste(month, 1:n())) 
#convert to date
answer$date<-as.Date(answer$date, "%b_%Y %d")

# month     date      
# <fct>     <date>    
# 1 June_2014 2014-06-01
# 2 June_2014 2014-06-02
# 3 June_2014 2014-06-03
# 4 June_2014 2014-06-04
# 5 June_2014 2014-06-05
测试数据 df1%变异(日期=粘贴(月份,1:n()) #转换为日期
回答$date这里有一个使用dplyr包的解决方案。它将序列号粘贴到“月\年”列上,然后将其转换为日期对象。这假设数据帧是按月份的日期按时间顺序排列的

#test data
df1 <- data.frame(month=c(rep("June_2014",30), rep("July_2014",31)))

library(dplyr)
#Paste day onto the month year
answer<- df1 %>% group_by(month) %>% mutate(date = paste(month, 1:n())) 
#convert to date
answer$date<-as.Date(answer$date, "%b_%Y %d")

# month     date      
# <fct>     <date>    
# 1 June_2014 2014-06-01
# 2 June_2014 2014-06-02
# 3 June_2014 2014-06-03
# 4 June_2014 2014-06-04
# 5 June_2014 2014-06-05
测试数据 df1%变异(日期=粘贴(月份,1:n()) #转换为日期
回答$date与其这样做,为什么不从三个数据框中选择三个日期列,然后运行
unique
删除重复项?我需要对三个数据框进行rbind,并根据日期进行排序,因为冬季数据框仅包含1月、2月、11月的数据,2014年至2018年12月。夏季和春季也是如此。我们需要找到一种方法,从2014年1月1日到2018年10月31日,以有序的方式rbind所有三个季度的数据框,而不是这样做,为什么不从三个数据框中选择三个日期列,然后运行
unique
删除重复数据?我需要绑定三个数据帧,并根据日期进行订购,因为冬季数据帧仅包含2014-2018年所有年份的1月、2月、11月和12月的数据。这同样适用于夏季和春季。我们需要找到一种方法,从2014年1月1日到2018年10月31日,以有序的方式rbind所有三个季节的数据帧,效果完美!很好用!使用dplyr的好解决方案使用dplyr的好解决方案