2017-04-10 95 views
0

我已经导入的CSV成R具有两列:日期和的发现链接号,目的是创建示出的内置的链路的数量的线图网站。我的CSV看起来是这样的:格式化因素如日期变成所有日期,N/A

 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") 

所有日期值都被替换为'N/A'。

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) 

但我得到“所有格式都解析失败,找不到格式”。警告信息。

这CSV是从Microsoft SQL Server Management Studio中的出口。

+3

您的日期格式看起来像'%Y-%间%D' – akrun

+0

'stringsAsFactors = FALSE' – jwells

+0

虽然转换,某些程序可能会在文件的开头添加“ï¿¿”。您可以在导入之前到R. –

回答

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”作为below.Here列名是具有垃圾数据的问题列。

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") 

下面是输出(I有一个名为列作为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 

+1

谢谢你做到了!我认为这些奇怪的角色令人困惑。 – jceg316

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

抱歉,并不意味着链接...该评论是自动添加的。你应该添加一个解释给你的答案,虽然有助于描述为什么这行代码有助于回答提问者的问题 – r0m4n