我有以下数据,这两列都是日期,必须以天为单位。但是,日期列之一中的大多数值都是空白,因此我必须为它们返回NA。
a b
2012年2月7日
2012年8月18日
2012年8月13日
2012年4月16日
2012年4月26日
2012年3月5日2012年12月5日
09-06-2012
30-05-2012
22-06-2012
2012年5月7日
30-06-2012
2012年9月5日
22-06-2012
2012年2月7日
2012年7月17日
2012年8月17日
2012年7月16日
2012年1月8日
2012年5月8日
2012年8月17日
2012年4月30日
2012年5月7日
2012年7月4日
2012年4月27日
2012年6月21日
2012/03/07
2012年7月21日
24-04-2012
2012年5月6日
2012/03/07
2012年2月4日2012年1月6日
2012年6月4日
15-04-2012
2012年6月16日
2012年1月8日
2012年5月13日
2012年9月7日
2012年9月7日
2012年4月18日
2012年9月8日
2012年10月4日
2012年12月5日
2012年4月4日
2012年4月6日2012年4月6日
15-06-2012
2012年2月7日
2012年5月7日
2012年8月21日
2012年7月19日
2012年6月8日
15-06-2012
2012年6月4日
2012年4月6日
2012年7月23日
2012年6月4日
2012年12月4日2012年11月6日
2012年5月24日
2012年3月8日
2012年4月5日2012年9月5日
2012年7月5日
2012年7月6日
2012年6月7日
2012年7月13日
2012年7月26日
2012年4月26日
22-06-2012
2012年7月26日
2012年12月4日
2012年7月8日
2012年6月27日
2012年3月4日2012年6月6日
2012年4月13日
2012年7月28日
2012年7月5日
2012年6月29日
2012年3月4日2012年6月6日
2012年4月4日
2012年4月4日2012年5月24日
2012年4月4日
2012年5月4日
2012年7月4日
2012年10月4日
2012年11月4日
2012年4月13日
2012年4月13日
2012年4月13日
2012年4月13日
14-04-2012
14-04-2012
14-04-2012
2012年4月18日
2012年4月19日
2012年4月21日
2012年5月25日
2012年5月25日
2012年4月26日
2012年4月26日
2012年4月26日
2012年4月27日
2012年4月30日
2012年4月6日
2012年4月6日
2012年5月6日
2012年5月6日
2012年5月6日
2012年5月6日
2012年5月6日2012年7月16日
2012年6月6日2012年6月29日
我尝试了以下操作,但无法成功
date_strings[date_strings==""]<-NA # Replaced blank spaces with NA & removed them
head(date_strings)
newdata<-na.omit(date_strings)
str(newdata)
newdata$a<-as.Date(newdata$a,"%m%d%y")
newdata$b<-as.Date(newdata$b,"%m%d%y")
diff_in_days = difftime(newdata$a, newdata$b, units = "days") # days
答案 0 :(得分:2)
将日期更改为日期类,它将自动将空白变为NA
,然后使用difftime
减去天。
date_strings[] <- lapply(date_strings, as.Date, format = '%d-%m-%Y')
date_strings$diff_in_days = difftime(date_strings$b, date_strings$a,
units = "days")
date_strings
# a b diff_in_days
#1 2012-07-02 <NA> NA
#2 2012-08-18 <NA> NA
#3 2012-08-13 <NA> NA
#4 2012-04-16 <NA> NA
#5 2012-04-26 <NA> NA
#6 2012-05-03 2012-05-12 9
或直接减去
date_strings$diff_in_days = date_strings$b - date_strings$a
数据
date_strings <- structure(list(a = c("02-07-2012", "18-08-2012", "13-08-2012",
"16-04-2012", "26-04-2012", "03-05-2012"), b = c("", "", "",
"", "", "12-05-2012")), class = "data.frame", row.names = c(NA, -6L))
答案 1 :(得分:1)
有了tidyverse
,我们可以做到
library(dplyr)
library(lubridate)
date_strings %>%
mutate(across(everything(), dmy)) %>%
mutate(diff_in_days = b - a)
# a b diff_in_days
#1 2012-07-02 <NA> NA days
#2 2012-08-18 <NA> NA days
#3 2012-08-13 <NA> NA days
#4 2012-04-16 <NA> NA days
#5 2012-04-26 <NA> NA days
#6 2012-05-03 2012-05-12 9 days
date_strings <- structure(list(a = c("02-07-2012", "18-08-2012", "13-08-2012",
"16-04-2012", "26-04-2012", "03-05-2012"), b = c("", "", "",
"", "", "12-05-2012")), class = "data.frame", row.names = c(NA, -6L))