【发布时间】:2018-09-12 01:31:38
【问题描述】:
我有一个数据集如下:
19/9/1997 1997 年 9 月 22 日 1997 年 9 月 23 日 1997 年 9 月 24 日 1997 年 9 月 25 日 1997 年 9 月 26 日 1997 年 9 月 29 日 1997 年 9 月 30 日
35440 35471 35499 35591 35621 35652 35683 35713
1997 年 13 月 10 日 1997 年 10 月 14 日 1997 年 10 月 15 日 1997 年 10 月 16 日 1997 年 10 月 17 日 1997 年 10 月 20 日 1997 年 10 月 21 日 1997 年 10 月 22 日 1997 年 10 月 23 日 1997 年 10 月 24 日 1997 年 10 月 27 日 1997 年 10 月 28 日 1997 年 10 月 29 日 1997 年 10 月 30 日 1997 年 10 月 31 日
35500 35531 35561 35592 35622 35714 35745 35775
1997 年 13 月 11 日 1997 年 11 月 14 日 1997 年 11 月 17 日 1997 年 11 月 18 日 19/11/1997 1997 年 11 月 20 日 1997 年 11 月 21 日 1997 年 11 月 24 日 ...
此处应有的数据是(按要求复制) 19/9/1997 1997 年 9 月 22 日 1997 年 9 月 23 日 1997 年 9 月 24 日 1997 年 9 月 25 日 1997 年 9 月 26 日 1997 年 9 月 29 日 1997 年 9 月 30 日 10/01/1997 1997 年 10 月 2 日 10/03/1997 10/06/1997 10/07/1997 10/08/1997 10/09/1997 1997 年 10 月 10 日 1997 年 10 月 13 日 1997 年 10 月 14 日 1997 年 10 月 15 日 1997 年 10 月 16 日 1997 年 10 月 17 日 1997 年 10 月 20 日 1997 年 10 月 21 日 1997 年 10 月 22 日 1997 年 10 月 23 日 1997 年 10 月 24 日 1997 年 10 月 27 日 1997 年 10 月 28 日 1997 年 10 月 29 日 1997 年 10 月 30 日 1997 年 10 月 31 日 1997 年 11 月 3 日 1997 年 11 月 4 日 11/05/1997 1997 年 11 月 6 日 11/07/1997 1997 年 11 月 10 日 1997 年 11 月 11 日 1997 年 11 月 12 日 1997 年 11 月 13 日 1997 年 11 月 14 日 1997 年 11 月 17 日 1997 年 11 月 18 日 19/11/1997 1997 年 11 月 20 日 1997 年 11 月 21 日 1997 年 11 月 24 日
我有 5,149 行日期,其中日期位置有数字。我尝试使用以下方法修复丢失的日期: 修订前的尝试 1:
rm (list = ls(all=TRUE))
graphics.off()
library(readxl)
Dates <- read_excel("F:/OneDrive - University of Tasmania/Mardi Meetings/Dataset/Dates.xlsx")
x<-Dates[,1]
library(date)
library(datetime)
ans <- Reduce(function(prev, curr) {
f1 <- as.Date(curr, "%d/%m/%Y")
f2 <- as.Date(curr, "%m/%d/%Y")
if (is.na(f1)) return(f2)
if (is.na(f2)) return(f1)
if (prev < f1 && prev < f2) return(min(f1, f2))
if (prev < f1) return(f1)
if (prev < f2) return(f2)
}, x[-1], init=as.Date(x[1], "%d/%m/%Y"), accumulate=TRUE)
as.Date(ans, origin="1970-01-01")
但我收到以下错误:
+ }, x[-1], init=as.Date(x[1], "%d/%m/%Y"), accumulate=TRUE)
Error in Reduce(function(prev, curr) { : object 'x' not found
>
> as.Date(ans, origin="1970-01-01")
Error in as.Date(ans, origin = "1970-01-01") : object 'ans' not found
任何建议都将受到高度赞赏。
按照建议,我在修改后修改了代码尝试 2
> rm (list = ls(all=TRUE))
> graphics.off()
> library(readxl)
> Dates <- read_excel("F:/OneDrive - University of Tasmania/Mardi Meetings/Dataset/Dates.xlsx")
> dput(head(Dates))
structure(list(Date = c("33274", "33302", "33394", "33424", "33455",
"33486")), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
> x<-Dates[[1]]
> library(date)
> library(datetime)
Attaching package: ‘datetime’
The following object is masked from ‘package:date’:
as.date
> dates <- as.Date(x, format="%d/%m/%Y")
> dput(head(dates))
structure(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_,
NA_real_), class = "Date")
> head(dates,10)
[1] NA NA NA NA NA NA NA
[8] "1991-05-13" "1991-05-14" "1991-05-15"
As you can see I have lost the corrupted dates completely
今天28号我又试了
> rm (list = ls(all=TRUE))
> graphics.off()
> library(readxl)
> Dates <- read_excel("F:/OneDrive - University of Tasmania/Mardi Meetings/Dataset/Dates.xlsx")
> x<-Dates[[1]]
>
> library(date)
> library(datetime)
Attaching package: ‘datetime’
The following object is masked from ‘package:date’:
as.date
> formats <- c("%m/%d/%Y", "%d/%m/%Y", "%Y/%m/%d")
> dates <- as.Date(rep(NA, length(x)))
> for (fmt in formats) {
+ nas <- is.na(dates)
+ dates[nas] <- as.Date(as.integer(x[nas], format=fmt))
+ }
Error in as.Date.numeric(as.integer(x[nas], format = fmt)) :
'origin' must be supplied
In addition: Warning message:
In as.Date(as.integer(x[nas], format = fmt)) : NAs introduced by coercion
> dates <- as.Date(x, format="%d/%m/%Y")
> head(dates)
[1] NA NA NA NA NA NA
> head(dates, 10)
[1] NA NA NA NA NA NA NA
[8] "1991-05-13" "1991-05-14" "1991-05-15"
【问题讨论】:
-
这个问题是关于“损坏的日期”还是关于
'x' not found?由于我们没有您的数据,因此很难解决这方面的问题。也许您可以在调用Reduce之前提供dput(head(x))的输出? -
您好,感谢您的回复。 X 是日期向量。就在代码之前,您将在顶部看到列出的日期。它们是一列中的行?如您所见,在 30/09/97 之后,下一行是 3559。这就是它们损坏的原因。日期信息是从数据流中收集的。您有几行日期格式,有些日期只是变成数字。我需要按顺序排列日期中的所有行。日期不是按时间顺序排列的。它们代表一周中的某些日子,然后代表不存在的某些日子。下周再过几天。
-
请不要在您的问题中发布
rm(list = ls())之类的代码。我们希望能够复制和运行您的代码,而不必担心它会破坏我们计算机上正在进行的工作。 -
@Gregor,有时我想知道我是否应该在 R 沙箱中尝试这样的代码......有没有一种简单的方法可以暂时将
.GlobalEnv移开?不是万无一失,但更接近...... :-) -
我知道这不是一个简单的方法...我有时会打开两个 RStudio 实例,一个用于工作,一个用于堆栈溢出成瘾。