在R中添加月份到期日(如果数据存在)

时间:2016-12-07 15:56:52

标签: r date lubridate

我有一些问题在R中添加了几个月的日期,特别是我有一个专栏" Date"可能有也可能没有日期和另一栏"月份"可能有也可能没有正整数。如果同时存在日期和整数,我想添加它们,如下所示:

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

我一直得到的错误如下:

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

有什么想法吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

因此使用带有NA数据的%m+%存在一些问题(即使使用ifelse构造)。 解决这个问题的方法是增加天数,但不同的月份有不同的天数。因此,您可以预先对data.frame进行子集,然后rbind它:

#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>