用R计算X个双月期的总天数
Use R to calculate the total number of days in X number of bimonthly periods
> df <- data.frame(begin_date = as.Date("2016-01-01") + c(1:10),
+ term = c(11:20),
+ term_unit = c(rep("bimonthly", 5), rep("monthly", 5))
+ )
> df
begin_date term term_unit
1 2016-01-02 11 bimonthly
2 2016-01-03 12 bimonthly
3 2016-01-04 13 bimonthly
4 2016-01-05 14 bimonthly
5 2016-01-06 15 bimonthly
6 2016-01-07 16 monthly
7 2016-01-08 17 monthly
8 2016-01-09 18 monthly
9 2016-01-10 19 monthly
10 2016-01-11 20 monthly
我想计算每行的学期天数。贷款从 begin_date 开始,然后借款人按期限栏中指示的每月或每两个月(每月两次)还款。因此,在开始日期一个月后,第一个预定的每月付款将发生,第二个预定的双月付款将发生(第一个双月付款将在 begin_date 后 15 天发生)。
如果所有 term_units 都是每月我可以计算天数
> library(lubridate)
df$term_days <- as.integer(df$begin_date %m+% months(df$term) - df$begin_date)
但是我 运行 在尝试计算双月期限的天数时遇到了麻烦。
> df$term_days <- ifelse(df$term_unit == "monthly", as.integer(df$begin_date %m+% months(df$term) - df$begin_date),
+ ifelse((df$term/2) == floor(df$term/2), as.integer(df$begin_date %m+% months(df$term/2) - df$begin_date),
+ as.integer(df$begin_date %m+% months(floor(df$term/2)) - df$begin_date +15 )))
returns 错误
Error in validObject(.Object) :
invalid class “Period” object: periods must have integer values
对您的代码进行了细微更改:
df$term_days <- ifelse(df$term_unit == "monthly", as.integer(df$begin_date
%m+% months(df$term) - df$begin_date),ifelse((df$term/2) == floor(df$term/2),
as.integer(df$begin_date %m+% months(floor(df$term/2)) - df$begin_date),
as.integer(df$begin_date %m+% months(floor(df$term/2)) - df$begin_date +15 )))
你需要在第二个额外的发言权ifelse
> df <- data.frame(begin_date = as.Date("2016-01-01") + c(1:10),
+ term = c(11:20),
+ term_unit = c(rep("bimonthly", 5), rep("monthly", 5))
+ )
> df
begin_date term term_unit
1 2016-01-02 11 bimonthly
2 2016-01-03 12 bimonthly
3 2016-01-04 13 bimonthly
4 2016-01-05 14 bimonthly
5 2016-01-06 15 bimonthly
6 2016-01-07 16 monthly
7 2016-01-08 17 monthly
8 2016-01-09 18 monthly
9 2016-01-10 19 monthly
10 2016-01-11 20 monthly
我想计算每行的学期天数。贷款从 begin_date 开始,然后借款人按期限栏中指示的每月或每两个月(每月两次)还款。因此,在开始日期一个月后,第一个预定的每月付款将发生,第二个预定的双月付款将发生(第一个双月付款将在 begin_date 后 15 天发生)。
如果所有 term_units 都是每月我可以计算天数
> library(lubridate)
df$term_days <- as.integer(df$begin_date %m+% months(df$term) - df$begin_date)
但是我 运行 在尝试计算双月期限的天数时遇到了麻烦。
> df$term_days <- ifelse(df$term_unit == "monthly", as.integer(df$begin_date %m+% months(df$term) - df$begin_date),
+ ifelse((df$term/2) == floor(df$term/2), as.integer(df$begin_date %m+% months(df$term/2) - df$begin_date),
+ as.integer(df$begin_date %m+% months(floor(df$term/2)) - df$begin_date +15 )))
returns 错误
Error in validObject(.Object) :
invalid class “Period” object: periods must have integer values
对您的代码进行了细微更改:
df$term_days <- ifelse(df$term_unit == "monthly", as.integer(df$begin_date
%m+% months(df$term) - df$begin_date),ifelse((df$term/2) == floor(df$term/2),
as.integer(df$begin_date %m+% months(floor(df$term/2)) - df$begin_date),
as.integer(df$begin_date %m+% months(floor(df$term/2)) - df$begin_date +15 )))
你需要在第二个额外的发言权ifelse