在 R 中添加月份到日期(如果数据存在)
Add Months to Date in R (if Data Exists)
我在 R 中将月份添加到日期时遇到了一些问题,特别是我有一列 "Date" 可能有也可能没有日期,而另一列 "Months" 可能有也可能没有有一个正整数。如果同时有日期和整数我想添加它们,像这样:
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
有什么想法吗?感谢您的帮助。
因此,将 %m+%
与 NA 数据一起使用存在一些问题(即使使用 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>
我在 R 中将月份添加到日期时遇到了一些问题,特别是我有一列 "Date" 可能有也可能没有日期,而另一列 "Months" 可能有也可能没有有一个正整数。如果同时有日期和整数我想添加它们,像这样:
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
有什么想法吗?感谢您的帮助。
因此,将 %m+%
与 NA 数据一起使用存在一些问题(即使使用 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>