是否有任何r函数可以转换列标题(例如:Ran中的2018年1月,2018年2月等)?R中的“ Jan 2018”为“ Jan-18”?

时间:2019-06-05 14:54:03

标签: r

我想找到一个将列标题(2018年1月,2018年2月,2018年3月等)转换为1月18日,2月18日等的代码。 以下代码用于创建模板:

xx <- dcast(yy, type + name + code + Detail ~ Yearmon, value.var = "emp")

我尝试了几种将Yearmon转换为“ jan-18”格式的方法。

xx %>% mutate(levels = apply(expand.grid(month.abb, substr(1990:2019,3,4)), 1, paste, collapse="-"))
  

错误:列levels的长度必须为772(行数),或者为一,而不是360。

1 个答案:

答案 0 :(得分:1)

一个快速解决方案是dcast接受要在公式本身内应用的函数。因此,请在-公式的'Yearmon'中使用subdcast替换空格

dcast(yy, type+name+code+Detail~tolower(sub(" \\d{2}", "-", Yearmon)), 
             value.var="emp")

如果要基于“ Yearmon”订购,可以选择转换为yearmon类(从as.yearmonzoo)-添加了可复制的示例

library(zoo)
set.seed(24)
yy <- data.frame(name = rep(letters[1:4], each = 6), 
   emp = rnorm(24), Yearmon = paste(month.abb, 2018))
yy$Yearmon <- as.yearmon(yy$Yearmon)
out <- dcast(yy, name ~ Yearmon, value.var = 'emp')
nm1 <- grep("^[A-Za-z]{3} \\d{4}", names(out))
names(out)[nm1] <- tolower(sub(" \\d{2}", "-", names(out)[nm1]))
names(out)
#[1] "name"   "jan-18" "feb-18" "mar-18" "apr-18" "may-18" "jun-18" 
#[8] "jul-18" "aug-18" "sep-18" "oct-18" "nov-18" "dec-18"