我有一个数据集,其中有一个字符列为几个月(MONTH
)和一个数字列为年份(YEAR
)。为了将其用作面板数据,我需要将这些YEAR
和MONTH
组合成具有日期格式的变量。
我尝试将变量MONTH
更改为数字格式,然后将MONTH
与列YEAR
合并。 R不会将其识别为日期变量。
当前看起来像这样:
STATE MONTH YEAR VALUE
California JAN 2018 800
California FEB 2018 780
California MAR 2018 600
... ... ... ...
Minesota JAN 2018 800
Minesota FEB 2018 780
Minesota MAR 2018 600
... ... ... ...
我想要这样:
STATE TIME VALUE
California 01-2018 800
California 02-2018 780
California 03-2018 600
... ... ...
Minesota 01-2018 800
Minesota 02-2018 780
Minesota 03-2018 600
... ... ...
答案 0 :(得分:3)
我建议您通过以下方式处理此问题:使用真实的R日期,使用as.Date
生成R日期,然后使用format
呈现所需的字符串输出。像这样:
df$TIME <- format(as.Date(paste0(df$MONTH, df$YEAR, "01"), format="%b%Y%d"), "%m-%Y")
我将第一个随机分配给数据集中的每个日期,但这无关紧要,因为对format
的调用只包含月份和年份。
答案 1 :(得分:1)
在基数R中,您可以执行以下操作:
transform(df,TIME = paste(sprintf('%02d',match(MONTH,toupper(month.abb))),YEAR,sep = '-'))[c(1,5,4)]
STATE TIME VALUE
1 California 01-2018 800
2 California 02-2018 780
3 California 03-2018 600
4 ... NA-... ...
5 Minesota 01-2018 800
6 Minesota 02-2018 780
7 Minesota 03-2018 600
答案 2 :(得分:0)
将蒂姆的回答与易于使用的日期包lubridate
结合在一起,我们得到:
# This can handle months of JAN, FEB, ETC. Or it can handle months of 01,02,etc.
df$TIME <- lubridate::ymd(paste0(df$YEAR,df$MONTH,"01"))
# or if you need it in MM-YYYY format:
df$TIME <- format(lubridate::ymd(paste0(df$YEAR,df$MONTH,"01")), "%m-%Y")
答案 3 :(得分:0)
您可以简化以下内容,但可以更轻松地了解正在发生的事情:
GameObject.Find(tar.spawnedObjects[i].name).GetComponent<PCreator>().Show();
这是使用library(lubridate)
library(tidyverse)
df2 <- df %>%
mutate(TIME = parse_date_time(paste0(MONTH, YEAR), orders = "%b%Y"),
TIME = as.character(substr(TIME, 6, 7)),
TIME = paste0(TIME, "-", YEAR))
-解析R IMO中日期的最简单方法,来自lubridate
的{{1}}和来自基础R的dplyr
。
如果要保留日期列,则只需用管道插入另一个tidyverse
,然后将新列命名为其他内容即可。
答案 4 :(得分:0)
如果您想使用Tidyverse的完整解决方案,请考虑tidyr
和lubridate
的{{1}}的组合:
parse_date_time
还请检查以下相关问题:Converting year and month ("yyyy-mm" format) to a date?