2014-05-18 76 views
1

[R版本:3.1.0在數據幀轉換日期列

以下的主題已閱讀: - format a Date column in a Data Frame - Convert data frame with date column to timeseries

而關於沒有任何的運氣這個話題數等信息。

我只需要從一個.csv文件中導入一個數據框,並且我需要該索引作爲日期列指定的日期列。

df <- read.csv(sti, header=TRUE) 
df$Date <- as.Date(df$Date, format="%Y%m%d") 

(我試過幾個其他的DateFormats)

這應該是相當簡單的,但結果要麼是充滿N /作爲,列有錯誤的日期OG的錯誤信息的列。

我的csv文件包含Excel日期格式,我試過在Windows中更改語言設置。

我知道這是日期格式的東西,但我不知道是什麼。即使頭部的dput()似乎也沒有關係。這裏有一個縮:

structure(list(Date = c("30/12/2013", "27/12/2013", "23/12/2013", 
"20/12/2013", "19/12/2013", "18/12/2013"), MAERSKA = c(11180, 
11150, 10900, 10770, 10670, 10500), WDH = c(527, 522, 515.5, 
515.5, 512, 504.5), VWS = c(160.2, 159.8, 157, 156.6, 156.5, 
153), TRYG = c(524.5, 523, 520.5, 519, 504, 484), TOP = c(142.8, 
142.5, 141.9, 141.5, 139.9, 136.5), TDC = c(52.6, 52.7, 52.45, 
51.95, 51.65, 51.85), Pandora = c(294, 301.2, 304, 300.3, 296.1, 
293.1), NOVOB = c(198.8, 197.2, 195.1, 196.3, 195.6, 190.7), 
    Nordea = c(72.05, 71.35, 70.6, 70.1, 68.65, 67.8), COLOB = c(359, 
    358.3, 353.4, 353.2, 350.2, 342), CHR = c(215.4, 215.7, 212.3, 
    209.1, 206.3, 204.2), CARLB = c(600, 596, 586.5, 586, 584, 
    573), MAERSKB = c(11770, 11740, 11510, 11310, 11210, 11070 
    ), JYSKE = c(292.5, 288, 284.4, 282.8, 276.9, 275.7), GN = c(133.2, 
    132.3, 130.5, 129, 127.8, 126.2), GENMAB = c(212, 214.9, 
    217.4, 222.5, 221.6, 216.7), FLS = c(296.1, 290.3, 280.3, 
    278.1, 273.6, 267.1), DSV = c(177.8, 178.2, 176.8, 174, 171.2, 
    169.3), DANSKE = c(124.4, 124.3, 124.3, 123.7, 121, 120.3 
    ), NOVOZYMESB = c(228.9, 229.9, 228.5, 230.4, 219.9, 215.6 
    )), .Names = c("Date", "MAERSKA", "WDH", "VWS", "TRYG", "TOP", 
"TDC", "Pandora", "NOVOB", "Nordea", "COLOB", "CHR", "CARLB", 
"MAERSKB", "JYSKE", "GN", "GENMAB", "FLS", "DSV", "DANSKE", "NOVOZYMESB" 
), row.names = c(NA, 6L), class = "data.frame") 

其他信息:

> sessionInfo() 
R version 3.1.0 (2014-04-10) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: 
[1] LC_COLLATE=English_United Kingdom.1252 
[2] LC_CTYPE=English_United Kingdom.1252 
[3] LC_MONETARY=English_United Kingdom.1252 
[4] LC_NUMERIC=C       
[5] LC_TIME=English_United Kingdom.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

我希望有人有什麼可能導致該問題的想法。稍後,我需要將數據幀轉換爲動物園對象,因爲PerformanceAnalytics包需要將其作爲輸入。

+3

我可能不明白這個問題 - 問題只是爲了適應你的格式,你需要做'as.Date(df $ Date,format =「%d /%m /%Y」)? –

+2

請刪除手動添加到'dput'輸出的「.....」,否則不能輕鬆複製和粘貼。 –

+0

如果我粘貼完整的dput()輸出,它將超過字符限制。 @ user3114046我需要將日期列轉換爲R的日期列,所以我稍後可以將我的數據框轉換爲動物園對象。 Read.zoo()無法讀取csv文件,因此我想將其作爲數據幀讀取,然後再進行轉換。 – marcopah

回答

12

使用上面發佈的數據,日期列是一個字符。而且由於你的日期看起來像「30/12/2013」​​格式應該是「%d /%m /%Y」而不是「%Y%m%d」。使格式正確以進行轉換非常重要。因此,你應該能夠做到

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

與樣本數據,

> class(df$Date)=="Date" 
[1] TRUE 
> sum(is.na(df$Date))==0 
[1] TRUE 

所以一切看起來不錯。

+0

查看原帖的評論,謝謝! – marcopah