> 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
Ich möchte die Anzahl der Tage in der Laufzeit für jede Zeile berechnen. Das Darlehen beginnt am begin_date und dann macht der Kreditnehmer die Anzahl der monatlichen oder zweimonatlichen Zahlungen in der Begriffspalte. So würde ein Monat nach dem Anfangsdatum die erste geplante monatliche Zahlung stattfinden und die zweite geplante zweimonatliche Zahlung würde eintreten (das erste zweimonatliche Ereignis würde 15 Tage nach dem Anfangsdatum stattfinden).Verwenden Sie R, um die Gesamtzahl der Tage in X Anzahl der zweimonatlichen Zeiträume zu berechnen.
Wenn alle term_units monatlich waren konnte ich die Anzahl der Tage
> library(lubridate)
df$term_days <- as.integer(df$begin_date %m+% months(df$term) - df$begin_date)
berechnen Aber ich laufe in Schwierigkeiten, wenn ich versuche und die Anzahl der Tage für die zweimonatlich erscheinende Begriffe zu berechnen.
> 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)))
gibt den Fehler
Error in validObject(.Object) :
invalid class “Period” object: periods must have integer values
ich es geschafft, Es funktioniert, indem man '% m +% months (df $ term/2)' in '% m +% months (floor (df $ term/2))' in der zweiten Zeile ändert. Wenn jemand eine elegantere Lösung hat, würde ich es gerne sehen. – liamvt