2017-06-13 28 views
0

我在RStudio中使用R.我的数据集来自一个CSV文件,只有2个变量,即日期和价格(如下所示提取物):为什么我的R代码在日期列变换期间给我这个特定的错误消息?

Date   Price 
2016-12-01  25 
2016-12-02  16 
2016-12-03  20 

和数据的推移,直到2017年7月13日

这里为R代码:

test1.data <- read.csv("test1.csv", as.is=TRUE) 
test1.data <- transform(test1.data, 
        week = as.POSIXlt(Date)$yday %/% 7 + 1, 
        wday = as.POSIXlt(Date)$wday, 
        year = as.POSIXlt(Date)$year + 1900) 

当我执行的代码,我收到以下错误信息:

错误as.POSIXlt.character(日期): 字符串是不是在一个标准的U nambiguous格式

我看了一下这个问题:What are the “standard unambiguous date” formats?

我是新来的R和我有一个困难时期试图找出解决方案。 我该如何纠正?

+0

看到有可能有一些元素没有一个很好的格式或与不存在的日期相关联。也许尝试'过滤(test1.data,is.na(as.POSIXlt(Date)))'看看。 – Frank

+0

我运行了这段代码,并得到以下错误消息: test1check <-filter(test1.data,is.na(as.POSIXlt(Date))) as.POSIXlt(Date)中的错误:未找到对象'Date' 另外:警告信息: 在data.matrix(数据)中:强制引入NAAs – user3115933

+0

D'oh。好吧,我的猜测是一个不好的建议......嗯,也许用'!grepl(“\\ d {4} - \\ d {2} - \\ d {2}”,Date)'来过滤。没有具体的例子很难诊断。一般指导是在这里:https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250 – Frank

回答

0

也许使用strftime为你工作:

# create Data 
test1.data <- data.frame(Date=c('2016-12-01','2016-12-02','2016-12-03'),Price=c(25,16,20)) 

test1.data <- transform(test1.data, 
    week = strftime(Date,format = '%V'), 
    wday = strftime(Date,format = '%a'), 
    year = strftime(Date,format = '%Y')) 

输出:

> test1.data 
     Date Price week wday year 
1 2016-12-01 25 48 Thu 2016 
2 2016-12-02 16 48 Fri 2016 
3 2016-12-03 20 48 Sat 2016 

在这种情况下你想要的一年,平日和一年的一周,我承担。有很多更多的选项,你可以在?strftime

+0

谢谢,但我收到相同的错误消息: 错误as.POSIXlt.character(x,tz = tz): 字符串不是标准的明确格式 – user3115933

+1

'Date'列中的值都严格遵循_YYYY-MM-DD_方案吗?因为这绝对是毫不含糊的。你是否尝试并运行我的代码? – Val

+0

感谢您指点我。有一些日期没有遵循yyyy-mm-dd格式! – user3115933

相关问题