2013-03-11 126 views
-3

我將時間序列日期加載到R中作爲數據框。但是,當我查看數據時,雖然日期列的類被識別爲日期類,但時間序列日期不會顯示爲字符串。如果不使用動物園,我怎樣才能讓數據集以字符串格式顯示日期。這實際上是爲了視覺目的而能夠看到數據是否正確。數字日期到字符串日期

Date  Open High Low Close Volume Adj Close 
3/8/2013 834.5 834.92 825.05 831.52 2911900 831.52 
3/7/2013 834.06 836.62 829.58 832.6 2052700 832.6 
3/6/2013 841.03 844 828.81 831.38 2873000 831.38 
3/5/2013 828.93 840.15 828.9 838.6 4044100 838.6 
3/4/2013 805.3 822.84 805 821.5 2775600 821.5 

以R爲:

Date Open High Low Close Volume Adj.Close 
15772 834.50 834.92 825.05 831.52 2911900 831.52 
15771 834.06 836.62 829.58 832.60 2052700 832.60 
15770 841.03 844.00 828.81 831.38 2873000 831.38 
15769 828.93 840.15 828.90 838.60 4044100 838.60 
15768 805.30 822.84 805.00 821.50 2775600 821.50 
15765 797.80 807.14 796.15 806.19 2175400 806.19 

我使用的命令

data=read.csv("file location",header=T,colClasses=c("Date","numeric","numeric","numeric","numeric","numeric","numeric")) 

這裏是dput輸出:

dput(head(data)) 
structure(list(Date = structure(c(15772, 15771, 15770, 15769, 
15768, 15765), class = "Date"), Open = c(834.5, 834.06, 841.03, 
828.93, 805.3, 797.8), High = c(834.92, 836.62, 844, 840.15, 
822.84, 807.14), Low = c(825.05, 829.58, 828.81, 828.9, 805, 
796.15), Close = c(831.52, 832.6, 831.38, 838.6, 821.5, 806.19 
), Volume = c(2911900, 2052700, 2873000, 4044100, 2775600, 2175400 
), Adj.Close = c(831.52, 832.6, 831.38, 838.6, 821.5, 806.19)), .Names = c("Date", 
"Open", "High", "Low", "Close", "Volume", "Adj.Close"), row.names = c(NA, 
6L), class = "data.frame") 
+0

你能給小樣本數據嗎? – 2013-03-11 02:09:11

+1

hi @jessica,歡迎來到SO。如果您可以請給我們一個「輸入(。)」您的數據,這將會有所幫助。 – 2013-03-11 02:16:36

+1

請注意,您特意要求您使用'dput'('str'也有幫助)的工具來描述您的數據。你必須瞭解R的基本原理是,數據被打印到屏幕上的方式可能會或可能不會與它實際存儲的方式有任何關聯。有一個原因,我們要求你做這些事情。只是粘貼在打印輸出中是沒有用的,並且不會幫助任何人。賠率是你的專欄被強制爲數字,但無法確切地知道你提供的信息。 – joran 2013-03-11 02:55:24

回答

1

你將要使用as.Date,你會hav e知道數據的起源日期。例如,假設你知道你的最新數據計算從1970-01-01,你可以這樣做轉換:

dates <- c(1314, 1315, 1316) 
as.Date(dates, format="%Y-%m-%d", origin="1970-01-01") 

[1] "1973-08-07" "1973-08-08" "1973-08-09" 

更新

每李嘉圖的評論,它出現在源數據是1997-05-28

as.Date(dates, format="%Y-%m-%d", origin="1997-05-28") 

[1] "2001-01-01" "2001-01-02" "2001-01-03" 
+0

我不確定這是否是解決OP問題的方法。你正在尋找'1314'來匹配'2001-01-01'。 – 2013-03-11 02:15:35

+0

謝謝你幫助傑森。所以我使用read.csv(「file-location」,header = T,colClasses = c(「Date」,「numeric」...))加載數據。日期是第一列,並且是典型的字符串格式(例如「2001/01/01」)。我不知道啓動數據的來源。我有點驚訝,因爲R用來加載這些數據並以字符串格式顯示日期。不過最近它一直以數字顯示日期。很五分。 – jessica 2013-03-11 02:19:49

+0

起源似乎是「1997-05-28」。相當奇怪的起源。 – JackeJR 2013-03-11 02:20:53

0

您可以將日期欄保留爲字符,然後將其轉換爲日期。

或如在函數read.table的幫助下指示:

否則,需要有一個作爲方法(從包中的方法),用於從「字符」,以指定的正式類 轉換。

請參閱this question如何應用此。

setClass("myDate") 
setAs("character","myDate", function(from) as.Date(from, format="%d/%m/%Y")) 

df <- read.table(header = TRUE, colClasses=c("myDate","numeric","numeric","numeric","numeric","numeric","numeric"), 
text = 'Date Open High Low Close VolumeAdj Close 
3/8/2013 834.5 834.92 825.05 831.52 2911900 831.52 
3/7/2013 834.06 836.62 829.58 832.6 2052700 832.6 
3/6/2013 841.03 844 828.81 831.38 2873000 831.38 
3/5/2013 828.93 840.15 828.9 838.6 4044100 838.6 
3/4/2013 805.3 822.84 805 821.5 2775600 821.5') 

str(df) 
'data.frame': 5 obs. of 7 variables: 
$ Date  : Date, format: "2013-08-03" "2013-07-03" "2013-06-03" ... 
$ Open  : num 834 834 841 829 805 
$ High  : num 835 837 844 840 823 
$ Low  : num 825 830 829 829 805 
$ Close : num 832 833 831 839 822 
$ VolumeAdj: num 2911900 2052700 2873000 4044100 2775600 
$ Close.1 : num 832 833 831 839 822