我正在尝试编写一个函数,将3个字母的月份缩写转换为R中的数值。
这就是我所拥有的,我想知道是否有更好的方法来做到这一点:
numMonth <- function(x) {
months <- list(jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12)
x <- tolower(x)
sapply(x,function(x) months[[x]])
}
numMonth(c('JAN','DEC'))
答案 0 :(得分:32)
由于month.abb是系统常量,为什么不使用:
match("jan", tolower(month.abb))
# [1] 1
mo2Num <- function(x) match(tolower(x), tolower(month.abb))
mo2Num(c("jan", "JAN", "Feb", "junk") )
#[1] 1 1 2 NA
如果您想查看相对较少数量的“系统常量”的其余部分,请转到
`?Constants`
示例文本暗示这些应该是与您的语言环境相关联的语言(尽管我无法用权限说明哪些语言环境可能会出现。另一种方法可能是在转换为月份后提取月数量) POSIXlt-object。这种方法需要记住月号os 0,所以你需要在这个实例中加1。
答案 1 :(得分:6)
使用矢量化,即:
numMonth<-function(x)
c(jan=1,feb=2,mar=3,apr=4,may=5,jun=6,jul=7,aug=8,sep=9,oct=10,nov=11,dec=12)[tolower(x)]