Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的YYYYMM列中提取月份_R - Fatal编程技术网

从R中的YYYYMM列中提取月份

从R中的YYYYMM列中提取月份,r,R,我试图提取它,但这些方法似乎只适用于YYYY-MM。我用日期(YYYYMM)表示数据,并试图用月份表示数据,例如:month 最后,我希望它看起来像这样: ID Date Month 1 200402 2 2 200603 3 3 200707 7 我这样做是希望绘制月平均值。假设您的日期列是数字,您可以使用模数: df$Month <- df$Date %% 100 df ID Date Mon

我试图提取它,但这些方法似乎只适用于YYYY-MM。我用日期(YYYYMM)表示数据,并试图用月份表示数据,例如:month

最后,我希望它看起来像这样:

ID    Date         Month
1     200402       2
2     200603       3
3     200707       7

我这样做是希望绘制月平均值。

假设您的
日期列是数字,您可以使用模数:

df$Month <- df$Date %% 100
df

  ID   Date Month
1  1 200402     2
2  2 200603     3
3  3 200707     7

df$Month您可以提取
Date
列的最后两个字符

sub('.*(..)$', '\\1', df$Date)
#Or without capture groups suggested by @Tim Biegeleisen
#sub("^.*(?=..$)", "", df$Date, perl = TRUE)
#[1] "02" "03" "07"
然而,理想情况下,应该避免使用正则表达式解析日期时间的信息。将其转换为日期,然后提取月份

format(as.Date(paste(df$Date, '01'), "%Y%m%d"), '%m')
#Or with zoo::yearmon
#format(zoo::as.yearmon(as.character(df$Date), "%Y%m"), '%m')

您只需使用以下方法即可:

library(stringr)
str_sub(df$Date,-2,-1)
或使用

df['Date'].str[-2:]

希望这有帮助

我更喜欢:
sub(“^.*(=..$)”,”,df$Date)
,因为它避免了捕获组。谢谢@TimBiegeleisen。捕获组是否有特定的劣势?是的,有。捕获组要求引擎使用比不需要/使用它们的正则表达式更多的存储。这是个小问题,但值得一提。
df['Date'].str[-2:]