2016-12-07 2 views
0

Ich habe einige Probleme beim Hinzufügen von Monaten zu einem Datum in R, insbesondere habe ich eine Spalte "Datum", die ein Datum haben kann oder nicht und eine andere Spalte "Monate" das kann eine positive ganze Zahl haben oder nicht. Wenn es sowohl ein Datum und eine ganze Zahl ich sie hinzufügen möchten, etwa so:Monate in R hinzufügen (wenn Daten vorhanden sind)

library(lubridate) 
df$End <- ifelse(is.na(df$Start) | is.na(df$Months),"",df$Start %m+% months(ol$Months)) 

Der Fehler Ich erhalte sich wie folgt:

Error in NextMethod(.Generic) : 
    NAs are not allowed in subscripted assignments 

Irgendwelche Ideen? Danke für Ihre Hilfe.

+0

Können Sie im hear des Datensatzes bearbeiten, so können wir die Datenstruktur sehen? –

+0

Sorry, ich bin mir nicht sicher, ob ich die Frage verstehe? Die Struktur der Daten ist "YYYY-MM-DD" oder NA. Die Struktur der Monate ist entweder eine Ganzzahl oder NA. – stevenjoe

+0

Können Sie die Spaltennamen und -daten ('head (df)') und die Datentypen ('str (df)') der Datumsspalte anzeigen, um zu wissen, ob die Datumsdaten in einem Date-, String-, POSIXlt-Format vorliegen? –

Antwort

1

So gibt es ein Problem mit der %m+% mit NA-Daten (auch mit dem ifelse Konstrukt). Ein Weg herum ist es, es mit Hinzufügen von Tagen zu tun, aber verschiedene Monate haben unterschiedliche Tage. So könnte man die data.frame vorher Teilmenge und dann rbind es:

#create a simple data.frame with only one row good row [3,] 
date_col <- as.Date(c("2016-04-15", NA, "2015-02-02")) 
month_col <- as.numeric(c(NA, NA, 3))     
df <- data.frame(date_col, month_col) 
df 
     Start Months 
1 2016-04-15  NA 
2  <NA>  NA 
3 2015-02-02  3 

#create new column and divide the data frame into two 
df$End <- NA 
df1 <- df[!is.na(df$Start) & !is.na(df$Months),] 
df2 <- df[is.na(df$Start) | is.na(df$Months),] 

#add months to End column 
df1$End <- df1$Start %m+% months(df1$Months) 

#and in the darkness bind them 
df <- rbind(df1, df2) 
> df 
     Start Months  End 
3 2015-02-02  3 2015-05-02 
2 2016-04-15  NA  <NA> 
31  <NA>  NA  <NA> 
Verwandte Themen