格式因子作为日期将所有日期变为N / A.

时间:2017-04-10 13:25:34

标签: r csv

我已将CSV导入R中,其中包含两列:发现日期和链接数,目的是创建一个折线图,显示为网站构建的链接数。我的CSV看起来像这样:

       Date| No.of.Links.Found|
1| 2011-09-12|                 2|
2|    2011-10-03|                 1|
3|    2011-10-10|                 1|
4|    2011-10-12|                 2|
5|    2011-10-14|                 2|
6|    2011-10-15|                 3|

(不确定那些奇怪的字符是什么,但它们也出现在R中。)

但是,在导入CSV时,日期列被格式化为因子。当我尝试

Links_Over_Time$Date<-as.Date(Links_Over_Time$Date,format = "%y/%m/%d")

所有日期值都替换为&#39; N / A&#39;。

Date No.of.Links.Found
1 <NA>                 2
2 <NA>                 1
3 <NA>                 1
4 <NA>                 2
5 <NA>                 2
6 <NA>                 3

我也尝试过:

Links_Over_Time$Date<-as.POSIXct(as.character(Links_Over_Time$Date), format = "%y/%m/%d")

同样的事情发生了。我也试过

library(lubridate)
Links_Over_Time$Date<-ymd(Links_Over_Time$Date)

但是我得到了#34;所有格式都无法解析。找不到格式。&#34;警告信息。

此CSV是Microsoft SQL Server Management Studio的导出。

2 个答案:

答案 0 :(得分:0)

Links_Over_Time <- read.csv('filepath/filename', stringsAsFactors = FALSE)

答案 1 :(得分:0)

你应该使用“ - ”而不是斜杠(“/”):

options(stringsAsFactors=F)

Links_Over_Time$Date<-as.Date(Links_Over_Time$Date,format = "%Y-%m-%d")

我已经将你的数据导入我的r控制台并尝试了上面的命令,除了第一条记录之外我得到了正确的结果,所以我使用第一行的下面命令从数据中删除了垃圾: 使用Encoding(df$column_name)并将其设置为“UTF-8”,如下所示。这里column_name是发出垃圾数据的列。

library(stringr)
Encoding(df$bcol) <- "UTF-8"
df$bcol1 <- str_replace(df$bcol,"(.*)(?=\\d{4}-\\d{2}-\\d{1,2})","")
df$dt <- as.Date(df$bcol1,format="%Y-%m-%d")

下面是输出(为简单起见,我将列命名为acol,bcol和ccol), dt是您清理日期数据所在的最后一列:

> df$dt <- as.Date(df$bcol1,format="%Y-%m-%d")
> df
  acol                  bcol ccol         dt
1 1  <U+0095><c8><c0>2011-09-12 2 2011-09-12
2 2                  2011-10-03 1 2011-10-03
3 3                  2011-10-10 1 2011-10-10
4 4                  2011-10-12 2 2011-10-12
5 5                  2011-10-14 2 2011-10-14
6 6                  2011-10-15 3 2011-10-15
    bcol1
1 2011-09-12
2 2011-10-03
3 2011-10-10
4 2011-10-12
5 2011-10-14
6 2011-10-15