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

2 回答 2

1

您将要使用as.Date并且必须知道数据的来源日期。例如,假设您知道您的日期数据从 开始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"
于 2013-03-11T02:14:29.180 回答
0

您可以将日期列保留为字符,然后将其转换为日期。

或者如 read.table 的帮助中所示:

否则需要有一个 as 方法(来自包方法)用于从“字符”转换为指定的正式类。

请参阅这个问题如何应用它。

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
于 2013-03-11T09:56:47.417 回答