如何基于R中的条件获取下个月或当月

时间:2019-05-07 14:33:06

标签: r if-statement mutate

我有以下数据,我需要从中创建一个计算字段-Change_Month。

Change_Month的伪代码为: 如果change_dt少于该月的15号,则Change_Month是同一个月,否则是下个月。

Adv_Code    Change_Dt     
A201        12/04/2017
A198        27/07/2017    
S1212       10/11/2017  

我尝试做:

df = mutate(df,
                Change_Month = months(Change_Dt,abbreviate = FALSE))

注意:Change_Dt是字符数据类型。

Expected output:
Adv_Code    Change_Dt   Change_Month     
A201        12/04/2017      April
A198        27/07/2017      August
S1212       10/11/2017      November

有人可以在mutate语句中为ifelse提供帮助吗?

1 个答案:

答案 0 :(得分:1)

我们可以使用round_date中的lubridate

library(lubridate)
df$Change_Month <- format(round_date(dmy(df$Change_Dt), unit = "month"), "%B")
df
#  Adv_Code  Change_Dt Change_Month
#1     A201 12/04/2017        April
#2     A198 27/07/2017       August
#3    S1212 10/11/2017     November

但是,您不必一定要打包就可以做到这一点。您也可以在基数R中执行此操作。

df$Change_Dt <- as.Date(df$Change_Dt, "%d/%m/%Y")
with(df, ifelse(as.integer(format(Change_Dt, "%d")) < 15, 
   format(Change_Dt, "%B"), format(Change_Dt + 30, "%B")))
#[1] "April"    "August"   "November"