【问题标题】:Merging zoo object using do.call in R在 R 中使用 do.call 合并动物园对象
【发布时间】:2016-05-20 08:05:37
【问题描述】:

一个有几个这样的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

我使用以下代码将它们分组到一个动物园对象列表中:

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调用函数

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 对象。

有什么想法吗?

【问题讨论】:

  • 请使用dput()分享数据。
  • 我是在 R 中完成的,但我找不到如何将 ascii 文件放到这个站点上。对不起,我是新用户。
  • 使用dput(head(data_stu[1:4], 30)),然后将结果复制并粘贴到您的问题中。输出看起来很难看,但允许其他人看一看。
  • 谢谢,我在最近的编辑中放了我的数据样本。

标签: r merge zoo do.call


【解决方案1】:

问题是所有动物园对象的索引都是因素。您需要将它们转换为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")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2015-02-16
    • 2012-02-27
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多