我有一些问题在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
有什么想法吗?谢谢你的帮助。
答案 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>