R 日期格式有问题。如何将单独的月份和年份列合并为一个日期?

R 日期格式有问题。如何将单独的月份和年份列合并为一个日期?,r,date,R,Date,我正在处理劳动统计局的数据。当我从他的网页加载数据作为数据框时。我得到这样的东西: year period periodName latest value footnotes seriesID date <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 2020 M07 Jul

我正在处理劳动统计局的数据。当我从他的网页加载数据作为数据框时。我得到这样的东西:

year period periodName latest  value footnotes       seriesID      date     
  <dbl> <chr>  <chr>      <chr>   <dbl> <chr>           <chr>         
1  2020 M07    July       true   139582 "P preliminary" CES0000000001        
2  2020 M06    June       NA     137819 "P preliminary" CES0000000001        
3  2020 M05    May        NA     133028 ""              CES0000000001        
4  2020 M04    April      NA     130303 ""              CES0000000001        
5  2020 M03    March      NA     151090 ""              CES0000000001        
6  2020 M02    February   NA     152463 "C corrected"   CES0000000001  
year period period name最新值脚注seriesID date
1 2020 M07年7月真实139582“P初步”CES00000000001
2020年6月2日北美137819“P初步”CES00000000001
2020年5月3日北美133028英寸CES00000000001
4 2020年4月NA 130303英寸CES00000000001
5 2020年3月30日北美151090英寸CES00000000001
6 2020年2月2日NA 152463“C已更正”CES00000000001
如您所见,日期有两个不同的列(年和期间)。因此,我尝试将它们组合成一个日期列:

nfp$date <- as.yearmon(paste(nfp$year, nfp$period), "%Y %m")

nfp$date我认为您只需要将字符串设置为默认格式之一,即可被
as.yearmon
读取。从文档中,其中一个是
“%b%Y”
,因此您可以执行以下操作:

库(dplyr)
图书馆(动物园)
df%>%变异(日期=as.yearmon(粘贴(periodName,year)))
#>#tibble:6 x 8
#>年份期间期间名称最新值脚注序列ID日期
#>                                    
#>1 2020年7月7日真实139582“P初步”CES00000000001 2020年7月
#>2020年6月13日2016年6月19日“P初步”CES00000000001 2020年6月
#>3 2020年5月13日28英寸2020年5月3日
#>4 2020年4月4日2014年4月13日303英寸CES00000000001 2020年4月
#>5 2020年3月3日2009年3月15日“CES00000000001 2020年3月
#>6 2020年2月15日2002年2月15日463“C修正”CES00000000001 2020年2月

数据

df年期间期间期间名称最新值脚注序列ID
#>2020年7月1日2007年7月真实139582 P初步CES00000000001
#>2 2020年6月137819日中期CES00000000001
#>3 2020年5月13日2018年5月13日CES00000000001
#>4 2020年4月4日2013年4月13日CES00000000001
#>5 2020年3月3日2009年3月15日CES00000000001
#>6 2020年2月152463日修正后的CES00000000001

由(v0.3.0)于2020-08-07创建,我认为您只需将字符串设置为默认格式之一,即可被
读取为.yearmon
。从文档中,其中一个是
“%b%Y”
,因此您可以执行以下操作:

库(dplyr)
图书馆(动物园)
df%>%变异(日期=as.yearmon(粘贴(periodName,year)))
#>#tibble:6 x 8
#>年份期间期间名称最新值脚注序列ID日期
#>                                    
#>1 2020年7月7日真实139582“P初步”CES00000000001 2020年7月
#>2020年6月13日2016年6月19日“P初步”CES00000000001 2020年6月
#>3 2020年5月13日28英寸2020年5月3日
#>4 2020年4月4日2014年4月13日303英寸CES00000000001 2020年4月
#>5 2020年3月3日2009年3月15日“CES00000000001 2020年3月
#>6 2020年2月15日2002年2月15日463“C修正”CES00000000001 2020年2月

数据

df年期间期间期间名称最新值脚注序列ID
#>2020年7月1日2007年7月真实139582 P初步CES00000000001
#>2 2020年6月137819日中期CES00000000001
#>3 2020年5月13日2018年5月13日CES00000000001
#>4 2020年4月4日2013年4月13日CES00000000001
#>5 2020年3月3日2009年3月15日CES00000000001
#>6 2020年2月152463日修正后的CES00000000001

由(v0.3.0)创建于2020-08-07这里是您问题的另一个解决方案

library(tidyverse)
library(lubridate)
df2 <- df %>% 
  mutate(date2 = paste0(year, "-", periodName, "-01"),
         date2 = as.Date(date2, format = "%Y-%B-%d"),
         date2 = str_replace_all(date2, regex("(-01)"), ""))
#   year period periodName latest  value     footnotes      seriesID  date2
# 1 2020    M07       July   true 139582 P preliminary CES0000000001 2020-07
# 2 2020    M06       June   <NA> 137819 P preliminary CES0000000001 2020-06
# 3 2020    M05        May   <NA> 133028               CES0000000001 2020-05
# 4 2020    M04      April   <NA> 130303               CES0000000001 2020-04
# 5 2020    M03      March   <NA> 151090               CES0000000001 2020-03
# 6 2020    M02   February   <NA> 152463   C corrected CES0000000001 2020-02
库(tidyverse)
图书馆(lubridate)
df2%
突变(日期2=0(年份,“-”,周期名称,“-01”),
date2=as.Date(date2,格式=“%Y-%B-%d”),
date2=str_replace_all(date2,regex((-01)”,“”)
#年份期间期间名称最新值脚注序列ID日期2
#1 2020 M07年7月真实139582 P初步CES00000000001 2020-07
#2020年6月137819日2020年6月2日初步CES00000000001 2020-06
#3 2020年5月133028日2020-05年5月CES00000000001
#4 2020年4月130303日2020-04年4月130303日CES00000000001
#2020年3月5日2009年3月15日CES00000000001 2020-03
#6 2020年2月152463年2月1520日修正CES00000000001 2020-02

这是您问题的另一个解决方案

library(tidyverse)
library(lubridate)
df2 <- df %>% 
  mutate(date2 = paste0(year, "-", periodName, "-01"),
         date2 = as.Date(date2, format = "%Y-%B-%d"),
         date2 = str_replace_all(date2, regex("(-01)"), ""))
#   year period periodName latest  value     footnotes      seriesID  date2
# 1 2020    M07       July   true 139582 P preliminary CES0000000001 2020-07
# 2 2020    M06       June   <NA> 137819 P preliminary CES0000000001 2020-06
# 3 2020    M05        May   <NA> 133028               CES0000000001 2020-05
# 4 2020    M04      April   <NA> 130303               CES0000000001 2020-04
# 5 2020    M03      March   <NA> 151090               CES0000000001 2020-03
# 6 2020    M02   February   <NA> 152463   C corrected CES0000000001 2020-02
库(tidyverse)
图书馆(lubridate)
df2%
突变(日期2=0(年份,“-”,周期名称,“-01”),
date2=as.Date(date2,格式=“%Y-%B-%d”),
date2=str_replace_all(date2,regex((-01)”,“”)
#年份期间期间名称最新值脚注序列ID日期2
#1 2020 M07年7月真实139582 P初步CES00000000001 2020-07
#2020年6月137819日2020年6月2日初步CES00000000001 2020-06
#3 2020年5月133028日2020-05年5月CES00000000001
#4 2020年4月130303日2020-04年4月130303日CES00000000001
#2020年3月5日2009年3月15日CES00000000001 2020-03
#6 2020年2月152463年2月1520日修正CES00000000001 2020-02

谢谢您,但我想将期间和年份合并,以获得类似的结果:2020-01、2020-02。。等等当我尝试将期间和年份与您的代码相结合时,我得到了NAcolumn@JoseMontoya“我的代码”转换为
格式,默认情况下会像
Jul 2020
那样打印。。这是
as.yearmon
的正确输出。如果您完全使用我的代码(包括我从您的问题中获取的数据),您仍然会得到错误吗?如果是,也许
 year period periodName latest  value footnotes       seriesID      **date**     
      <dbl> <chr>  <chr>      <chr>   <dbl> <chr>           <chr>         <yearmon>
    1  2020 M07    July       true   139582 "P preliminary" CES0000000001 2020-07     
    2  2020 M06    June       NA     137819 "P preliminary" CES0000000001 2020-06  
    3  2020 M05    May        NA     133028 ""              CES0000000001 2020-05      
    4  2020 M04    April      NA     130303 ""              CES0000000001 2020-04  
    5  2020 M03    March      NA     151090 ""              CES0000000001 2020-03  
    6  2020 M02    February   NA     152463 "C corrected"   CES0000000001 2020-02
library(tidyverse)
library(lubridate)
df2 <- df %>% 
  mutate(date2 = paste0(year, "-", periodName, "-01"),
         date2 = as.Date(date2, format = "%Y-%B-%d"),
         date2 = str_replace_all(date2, regex("(-01)"), ""))
#   year period periodName latest  value     footnotes      seriesID  date2
# 1 2020    M07       July   true 139582 P preliminary CES0000000001 2020-07
# 2 2020    M06       June   <NA> 137819 P preliminary CES0000000001 2020-06
# 3 2020    M05        May   <NA> 133028               CES0000000001 2020-05
# 4 2020    M04      April   <NA> 130303               CES0000000001 2020-04
# 5 2020    M03      March   <NA> 151090               CES0000000001 2020-03
# 6 2020    M02   February   <NA> 152463   C corrected CES0000000001 2020-02