2012-11-29 66 views
4

我有一個csv從管理信息系統下載數據。有一些變量是日期,並以CSV格式「2012/11/16 00:00:00」中的字符串形式寫入csv。如何在R中轉換日期時處理空白項目

在讀取csv文件後,我使用函數as.Date()將日期變量轉換爲日期。這適用於所有不包含任何空白項目的變量。

對於那些確實有空白的項目,我得到了以下錯誤消息: 「字符串不是一個明確的標準格式」

我怎樣才能得到R 2與類似「0000/00更換空白項目/ 00 00:00:00「以便as.Date()函數不會中斷?您可能會推薦其他方法嗎?

+3

'as.Date(c(「2012/11/16 00:00:00,NA))'對我來說工作得很好,所以我假設在這些空白字段中除了NAs之外還有其他的東西。最好將這些空白字段更改爲NAs。你可以使用'dput()'發佈數據的一個子集嗎? –

+0

數據具有日期或「」字符串。這裏是來自dput()的(濃縮)輸出:結構(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L,1L,1L,1L ,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 6L,6L,6L,6L,6L,6L,6L,6L,6L,6L,6L, 6L,6L,6L,6L, 6L,6L,6L,6L,1L,9L,9L),.Label = c(「」,「2012/10/04 00:00:00」, 「2012/10/09 00:00:00「,」2012/10/15 00:00:00「,」2012/11/02 00:00:00「, 」2012/11/12 00:00:00「,」 2012/11/15 00:00:00「,」2012/11/16 00:00:00「, 」2012/11/19 00:00:00「,」2012/11/30 00:00:00 「),class =」factor「) –

+0

請參閱下面的評論我的答案關於因素... –

回答

3

如果他們串,確實如

mystr <- c("2012/11/16 00:00:00"," ","") 
mystr[grepl("^ *$",mystr)] <- NA 
as.Date(mystr) 

工作這樣簡單的事情? (正則表達式"^ *$"查找包含字符串(^)開始的字符串,零個或多個空格(*),其次是字符串($)的結束。更一般我認爲你可以使用"^[[:space:]]*$"捕捉其他種類空白(突片等)

+0

現在就試試這個。 –

+0

要小心一些因素,你可能首先需要'as.character()' - 'grepl'可能會在因素上出現奇怪的現象。 –

+0

這很奇怪是不是?當您使用read.csv()讀取數據時,R如何默認所有因素。 grep似乎已經工作。我只是通過結果輸出來確保它的工作正常。 –

0

甚至更​​好的,具有在NAS當你在CSV讀取正確插入:

read.csv(..., na.strings='') 

或指定哪些應當被理解爲NA的所有的值的矢量.. 。

read.csv(..., na.strings=c('',' ',' '))