R:从 csv 中提取正确的时间日期

标签 r csv time-series text-parsing

我有一个 csv,其中包含一些时间序列数据,其日期时间格式如下:

mydata <- read.csv("mydata.csv")
> mode(mydata$t_5min[1])
[1] "numeric"

看起来 R 正在将其解释为一个因子,因为它无法理解格式:

mydata$t_5min[1]
[1] 1/3/2012 16:00
27698 Levels: 10/10/2012 10:00 10/10/2012 10:05 10/10/2012 10:10 10/10/2012 10:15 ... 9/6/2012 9:55

我尝试使用 strptime,它似乎对单个条目工作正常:

> strptime(x=mydata$t_5min[2],format="%d/%m/%Y %H:%M", tz="")
[1] "2012-04-01 06:10:00"
> mode(strptime(x=mydata$t_5min[2],format="%d/%m/%Y %H:%M", tz=""))
[1] "list"

但是如果我用 sapply 尝试这个,我会收到以下错误:

mydata$t_5min <- sapply(mydata$t_5min, strptime, format="%d/%m/%Y %H:%M", tz="")
Error in `$<-.data.frame`(`*tmp*`, "t_5min", value = list(sec = 0, min = 0L,  : 
replacement has 9000 rows, data has 1000

我尝试了 timeDate 库,结果稍好一些:

> as.timeDate(mydata$t_5min[1])
GMT
[1] [2012-01-03]

但是,我需要微小的精度。但是,timeDate 函数中的示例代码似乎不起作用(或者我使用错误,但它有点简短):

as.timeDate(mydata$t_5min[2], units=c("min"))
Error in as.timeDate(mydata$t_5min[2], units = c("min")) : 
unused argument(s) (units = c("min"))

将时间数据转换为 R 可以使用的数据的正确方法是什么?

这里有一些数据可以重复这些结果:

t_5min,n,value
1/3/2012 16:00,16,48.125
1/3/2012 16:05,28,44.39285714
1/3/2012 16:10,29,37.44827586
1/3/2012 16:15,28,30.39285714
1/3/2012 16:20,28,23.67857143
1/3/2012 16:25,29,19.10344828
1/3/2012 16:30,28,16.35714286
1/3/2012 16:35,29,14.34482759
1/3/2012 16:40,28,11.71428571

最佳答案

您可以使用read.zoo以正确的格式直接读取数据:

library(zoo)
## you repalce text=... here by file = "mydata.csv"
read.zoo(text='
t_5min,n,value
1/3/2012 16:00,16,48.125
1/3/2012 16:05,28,44.39285714
1/3/2012 16:10,29,37.44827586
1/3/2012 16:15,28,30.39285714
1/3/2012 16:20,28,23.67857143
1/3/2012 16:25,29,19.10344828
1/3/2012 16:30,28,16.35714286
1/3/2012 16:35,29,14.34482759
1/3/2012 16:40,28,11.71428571',header=TRUE,format="%d/%m/%Y %H:%M", tz="",sep=',')


                    n    value
2012-03-01 16:00:00 16 48.12500
2012-03-01 16:05:00 28 44.39286
2012-03-01 16:10:00 29 37.44828
2012-03-01 16:15:00 28 30.39286
2012-03-01 16:20:00 28 23.67857
2012-03-01 16:25:00 29 19.10345
2012-03-01 16:30:00 28 16.35714
2012-03-01 16:35:00 29 14.34483
2012-03-01 16:40:00 28 11.71429

关于R:从 csv 中提取正确的时间日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16191422/

相关文章:

java - 使用 JAXB 将 CSV 文件转换为 JAVA 中的层次结构 XML

sql-server - 我需要从 SQL Server 转储表到 utf-8 中的 csv

python - 将单词 Null 添加到 CSV 文件

time-series - 如何使用kdb +跟踪任意数量的IOT标量流?

r - 如何在 R 中生成转换类型表?

python - pandas.DataFrame.rolling 不适用于巨大的花车

r - 如何使用循环过滤数据框中的数据并根据它更改列的单元格值?

R:如何使用文本框注释 ggplot?

python - 潜在语义索引如何用于特征选择?

r - R markdown 中投影仪的颜色变化