首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中创建月周期

如何在R中创建月周期
EN

Stack Overflow用户
提问于 2022-10-28 22:00:00
回答 5查看 59关注 0票数 1

我有每月的数据,我想为这段时间增加另一栏。专栏里写着一月的M01,二月的M02,三月的M03等等。有办法这样做吗?

这就是我所拥有的:

代码语言:javascript
复制
unemployment = data.frame(Month = c("Sept 2002", "Oct 2002", "Nov 2002", "Dec 2002", "Jan 2003", "Feb 2003"), 
                   Total = c(5.7, 5.7, 5.9, 
6, 5.8, 5.9))

> unemployment

      Month Total
1 Sept 2002   5.7
2  Oct 2002   5.7
3  Nov 2002   5.9
4  Dec 2002   6.0
5  Jan 2003   5.8
6  Feb 2003   5.9

这就是我想要的:

代码语言:javascript
复制
      Month Period Total
1 Sept 2002 M09      5.7
2  Oct 2002 M10      5.7
3  Nov 2002 M11      5.9
4  Dec 2002 M12      6.0
5  Jan 2003 M01      5.8
6  Feb 2003 M02      5.9

编辑更新代码以显示全部12个月

代码语言:javascript
复制
structure(list(Month = c("Jan", "Feb", "Mar", "Apr", "May", "June"
), Year = c("2003", "2003", "2003", "2003", "2003", "2003"), 
    Unemp_percent = c(5.8, 5.9, 5.9, 6, 6.1, 6.3)), row.names = 5:10, class = "data.frame")
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2022-10-28 22:32:06

使用dplyr

代码语言:javascript
复制
unemployment %>% 
  mutate(Period = case_when(grepl("Jan",Month) ~ "M01",
                            grepl("Feb",Month) ~ "M02",
                            grepl("Mar",Month) ~ "M03",
                            grepl("Apr",Month) ~ "M04",
                            grepl("May",Month) ~ "M05",
                            grepl("June",Month) ~ "M06",
                            grepl("July",Month) ~ "M07",
                            grepl("Aug",Month) ~ "M08",
                            grepl("Sept",Month) ~ "M09",
                            grepl("Oct",Month) ~ "M10",
                            grepl("Nov",Month) ~ "M11",
                            grepl("Dec",Month) ~ "M12"))
票数 2
EN

Stack Overflow用户

发布于 2022-10-28 22:30:10

您可以使用mutategsubmatch,前三个字母与内置的month.abb数据一起使用

代码语言:javascript
复制
library(dplyr)

unemployment |> 
  mutate(.after = Month,  
Period = paste0("M", match(gsub("(.{3})(.*)", "\\1", Month ), month.abb)))
代码语言:javascript
复制
      Month Period Total
1 Sept 2002     M9   5.7
2  Oct 2002    M10   5.7
3  Nov 2002    M11   5.9
4  Dec 2002    M12   6.0
5  Jan 2003     M1   5.8
6  Feb 2003     M2   5.9
票数 1
EN

Stack Overflow用户

发布于 2022-10-28 22:40:52

以下是另一种选择:

代码语言:javascript
复制
unemployment %>% 
  mutate(month = gsub("(^.{3}).*", "\\1", Month),
         Period = paste0("M", as.numeric(factor(x$month, month.abb)))) %>% 
  select(Month, Period, Total)

输出:

代码语言:javascript
复制
      Month Period Total
1 Sept 2002     M9   5.7
2  Oct 2002    M10   5.7
3  Nov 2002    M11   5.9
4  Dec 2002    M12   6.0
5  Jan 2003     M1   5.8
6  Feb 2003     M2   5.9
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74241306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档