我有以下数据,我需要从中创建一个计算字段-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提供帮助吗?
答案 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"