我没有在R中使用日期的经验。我已经阅读了所有文档,但我仍然无法弄清楚为什么我会收到此错误。我试图采用一个字符串向量,并使用一些指定的格式将其转换为日期向量。我已尝试使用for循环并指示转换每个日期,或使用像sapply这样的矢量函数,但两者都不起作用。这是使用for循环的代码:
dates = rawData[,ind] # get vector of date strings
print("single date example")
print(as.Date(dates[1]))
dDates = rep(1,length(dates)) # initialize vector of dates
class(dDates)="Date"
for (i in 1:length(dates)){
dDates[i]=as.Date(dates[i])
}
print(dDates[1:10])
编辑:关于"日期"的信息变量
[1] "dates"
V16 V17 V18 V19 V36
[1,] "2014-01-16" "2014-01-30" "2014-01-16" "2014-01-17" "1999-03-16 12:00"
[2,] "2014-01-04" "2014-01-18" "2014-01-04" "2014-01-08" "1998-09-04 12:00"
[3,] "2014-03-05" "2014-03-19" "2014-03-05" "2014-03-07" "1996-09-30 05:00"
[4,] "2014-01-21" "2014-02-04" "2014-01-22" "2014-01-24" "1995-08-21 12:00"
[5,] "2014-01-07" "2014-01-21" "2014-01-07" "2014-01-09" "1994-04-07 12:00"
[1] "class(dates)"
[1] "matrix"
[1] "class(dates[1,1])"
[1] "character"
[1] "dim(dates)"
[1] 56557 8
我得到的结果如下:
[1] "single date example"
[1] "2014-01-16"
Error in charToDate(x) :
character string is not in a standard unambiguous format
所以基本上,当我尝试将日期字符串的signle元素解析为日期时,它可以正常工作。但是当我尝试在循环中解析日期时,它会中断。怎么会这样?
我使用循环而不是sapply
的原因是因为它返回了一个更奇怪的结果。当我尝试跑步时:
dDates = sapply(dDates, function(x) as.Date(x, format = "%Y-%m-%d"))
我得到以下输出:
2014-01-16 2014-01-04 2014-03-05 2014-01-21 2014-01-07 2014-01-02 2014-01-08
NA NA NA NA NA NA NA
2014-02-22 2014-01-09 2014-02-22
NA NA NA
这很奇怪。如您所见,由于我的格式正确,因此可以解析日期。但由于某种原因,它也给出了NA的时间值(或者至少是我认为NA意味着的)。也许这种情况正在发生,因为我的一些日期字符串有时间,而其他人则没有。但问题是我把时间排除在格式之外,因为我不在乎时间。
有谁知道为什么会这样或者如何修复它?我无法在网上任何地方找到你可以设置"日期对象的时间价值很容易 - 我似乎无法摆脱那个NA。不知怎的,即使是for循环也不起作用!要么是,输出很奇怪,我没有得到预期的结果,即使我的格式是正确的。非常令人沮丧的是,像解析日期向量这样的简单事情比在matlab或java中要困难得多。
请帮忙吗?
编辑:当我尝试简单地
dDates = as.Date(dates,format="%m/%d/%Y")
我得到了输出
"dDates[1:10]"
[1] NA NA NA NA NA NA NA NA NA NA
仍然是那些神秘的NA。我也收到了错误
Error in as.Date.default(value) :
do not know how to convert 'value' to class “Date”
答案 0 :(得分:0)
使用您的数据子集
v <- c("2014-01-16", "2014-01-30", "2014-01-16", "2014-01-17", "1999-03-16 12:00")
这些陈述是等价的,因为您的格式是默认格式:
as.Date(v)
[1] "2014-01-16" "2014-01-30" "2014-01-16" "2014-01-17" "1999-03-16"
as.Date(v, format = "%Y-%m-%d")
[1] "2014-01-16" "2014-01-30" "2014-01-16" "2014-01-17" "1999-03-16"
如果您想格式化日期的输出,请使用format
:
format(as.Date(v), format = "%m/%d/%Y")
[1] "01/16/2014" "01/30/2014" "01/16/2014" "01/17/2014" "03/16/1999"