R 中的因子到月-年的转换

Factor to Month-Year Conversion in R

有一个因子列,如 April-2017 February-2017 等。想要将其转换为月份和年份,以便按照月份和年份对列进行排序,以便它从一月开始。试过以下:

Combi$Month <- as.yearmon(levels(Combined$Month))[Combined$Month] -> Yields 'NA'
Combined$Month <- as.Date(Combined$Month,'%B-%Y') -> Yields 'NA'

"yearmon" class 可以表示年月,按预期排序:

library(zoo)
x <- factor(c('April-2017', 'February-2017')) # test data

ym <- as.yearmon(x, "%B-%Y")
sort(ym)
## [1] "Feb 2017" "Apr 2017"

因此,您实际上不需要将其转换为 "Date" class 也不需要单独的年份和月份,但如果出于某种原因未在问题中说明,您仍然需要需要单独的值然后 as.integer(ym)cycle(ym) 将年份作为 4 位数字,将月份作为 1 到 12 之间的数字。另外 as.Date(ym) 给出 "Date" class 值.

R 基本方式:

# Some sample data
df <- data.frame(period=sample(c("April-2017","February-2017"),10, replace = TRUE))

nicep <- function(x) {
    months <- c('January','February','March','April','May','June','July','August','September','October','November','December')
    l <- strsplit(x, '-')
    return(sprintf("%s-%02d",l[[1]][2], which(months == l[[1]][1])))
}

# change levels for a nice name
levels(df$period) <- unlist(lapply(as.character(levels(df$period)), FUN=nicep))