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))
有一个因子列,如 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))