如何在R中的数据框的不同列中重新格式化表示年份和月份的字符串?

时间:2014-08-11 15:05:32

标签: r dataframe reformat

我在R中有一个数据框,其中包含一堆列,其中两列表示年份和月份。我想重新格式化这两列,从而形成一个具有不同格式year_month的单个列。当前结构数据框df1是:

... | ... | year | month | ... | ...  
... | ... | 2000 |  P01  | ... | ... 
... | ... | 2000 |  P02  | ... | ... 
... | ... | 2000 |  P03  | ... | ...  
... | ... | 2000 |  P04  | ... | ... 
... | ... | 2000 |  P05  | ... | ... 
 .  |  .  |  .   |  .    |  .  |  .
 .  |  .  |  .   |  .    |  .  |  .

可以看出,数据框的月份列在每个月号前面都有字母P。现在我要删除此字母P重新格式化月份编号以表示月份名称而不是数字(如1月1日,2月份为02),然后将其加入年份列,以便与月份形成一个列和年份数据。因此,我想要这样的事情:

... | ... | month_year | ... | ...  
... | ... |  Jan. 2000 | ... | ... 
... | ... |  Feb. 2000 | ... | ... 
... | ... |  Mar. 2000 | ... | ...  
... | ... |  Apr. 2000 | ... | ... 
... | ... |  May. 2000 | ... | ... 
 .  |  .  |      .     |  .  |  .
 .  |  .  |      .     |  .  |  .

如何重新格式化两列并将它们分成一列?

1 个答案:

答案 0 :(得分:1)

使用“zoo”中的as.yearmonformat

使用示例将评论转移到答案:

df1 <- data.frame(year = 2000, month = c("P01", "P02", "P03", "P04"))
#   year month
# 1 2000   P01
# 2 2000   P02
# 3 2000   P03
# 4 2000   P04

library(zoo)
df2 <- transform(df1, yearmon = as.yearmon(paste0(year, sub("P", "-", month))))
df2$yearmon <- format(df2$yearmon, "%b. %Y")
df2
#   year month   yearmon
# 1 2000   P01 Jan. 2000
# 2 2000   P02 Feb. 2000
# 3 2000   P03 Mar. 2000
# 4 2000   P04 Apr. 2000