A有几个像这样的csv文件:
,timestamp,AirTemperature_House
1,2013-09-01 00:00:00,8.22
2,2013-09-01 01:00:00,6.53
3,2013-09-01 02:00:00,6.67
4,2013-09-01 03:00:00,5.58
5,2013-09-01 04:00:00,4.16
6,2013-09-01 05:00:00,4.76
7,2013-09-01 06:00:00,5.06
8,2013-09-01 07:00:00,5.16
9,2013-09-01 08:00:00,6.83
10,2013-09-01 09:00:00,8.59
11,2013-09-01 10:00:00,10.99
12,2013-09-01 11:00:00,11.08
我使用以下代码将它们分组到zoo对象列表中:
raw_data<-list.files(path = "./AWS_Data_STU/Air_temp/",pattern="Air",full.names = T)
data_stu<-lapply(raw_data,function(x){
ss<-read.csv(x)
ss<-zoo(ss,order.by = ss$timestamp)
})
我制作了一个动物园对象列表,它们看起来都像这样:
str(data_stu[[1]])
‘zoo’ series from 2013-09-01 00:00:00 to 2014-04-30 23:00:00
Data: num [1:5808] 8.22 6.53 6.67 5.58 4.16 4.76 5.06 5.16 6.83 8.59 ...
Index: Factor w/ 5808 levels "2013-09-01 00:00:00",..: 1 2 3 4 5 6 7 8 9 10
...
我想将我的所有列表合并到数据框中:
X1 x2 x3 X4 x5 x6 x7
1 12.95 NA NA NA
2 14.81 14.37 NA NA 12.78 NA
3 15.02 15.11 NA NA 12.61 NA
4 13.91 14.25 NA NA 11.89 NA
5 12.34 13.96 NA NA 10.86 NA
6 14.40 14.47 NA NA 10.40 NA
我使用了do call函数
do.call(merge.zoo,data_stu )
structure(c(7.66, 7.29, 7.34, 7.15, 6.76, 6.41, 6.25, 6.36, 6.78,
1 NA
2 NA
3 NA
4 NA
5 NA
6 NA
7 NA
8
但它只给了我NA对象。
有什么想法吗?
答案 0 :(得分:0)
问题是所有动物园对象的索引都是因子。您需要将它们转换为POSIXct
。此外,您不应该直接调用方法。即,您应该调用merge
而不是merge.zoo
,让R处理方法调度。
您还可以使用read.zoo
来帮助转换。
data_stu <- do.call(merge, lapply(raw_data, read.zoo, sep=",", header=TRUE,
FUN=as.POSIXct, colClasses=c("NULL", "character", "numeric")))