我想找到一个将列标题(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。
答案 0 :(得分:1)
一个快速解决方案是dcast
接受要在公式本身内应用的函数。因此,请在-
公式的'Yearmon'中使用sub
用dcast
替换空格
dcast(yy, type+name+code+Detail~tolower(sub(" \\d{2}", "-", Yearmon)),
value.var="emp")
如果要基于“ Yearmon”订购,可以选择转换为yearmon
类(从as.yearmon
到zoo
)-添加了可复制的示例
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"