List 关于llply或LAPPY的问题-将函数应用于列表中的data.frames

List 关于llply或LAPPY的问题-将函数应用于列表中的data.frames,list,r,plyr,zoo,lapply,List,R,Plyr,Zoo,Lapply,尊敬的R用户社区: 我在一个列表中有许多data.frame,如下所示(为了方便起见,在21个列表中只显示了一个data.frame): 如果我单独处理列表中的每个data.frame,我可以从temp和date创建一个zoo对象,如下所示: > BallitoRaw.zoo <- zoo(datal$BallitoRaw.DAT$temp, datal$BallitoRaw.DAT$date) 如何使用llply或apply(或类似工具)同时处理整个列表 输出需要进入一个新的da

尊敬的R用户社区:

我在一个列表中有许多data.frame,如下所示(为了方便起见,在21个列表中只显示了一个data.frame):

如果我单独处理列表中的每个data.frame,我可以从temp和date创建一个zoo对象,如下所示:

> BallitoRaw.zoo <- zoo(datal$BallitoRaw.DAT$temp, datal$BallitoRaw.DAT$date)
如何使用llply或apply(或类似工具)同时处理整个列表

输出需要进入一个新的data.frames列表,或一系列独立的data.frames(每个单独的data.frames在上面的示例中命名)。请注意,“日期”列虽然是一个常规时间序列(天),但包含缺少的日期(除了现有日期临时值的NAs);缺少的日期将由动物园职能部门填写。因此,带有zoo对象的输出data.frame将比原始对象长


感谢您的帮助。

makeNamedZoo
makeNamedZoo这是实现我所需的更简单的方法:

makeNamedZoo <- function(dfrm){ dfrmname <- deparse(substitute(dfrm))
  zooname <-dfrmname
   assign(zooname,   zoo(dfrm$temp, dfrm$date))
   return(get(zooname)) }
ListOfZoos <- lapply(dflist, makeNamedZoo)
names(ListOfZoos) <- paste( sub("DAT$", "", names(dflist) ), "zoo", sep="")
tozoo <- function(x) zoo(x$temp, x$date) 
data1.zoo <- do.call(merge, lapply(split(data1, data1$Filename), tozoo))

tozoo这是一种更容易实现我需要的方法:

tozoo <- function(x) zoo(x$temp, x$date) 
data1.zoo <- do.call(merge, lapply(split(data1, data1$Filename), tozoo))
tozoo
df1 <- data.frame(a= letters[1:10], date=as.Date("2011-01-01")+0:9, temp=rnorm(10) )
df2 <- data.frame(a= letters[1:10], date=as.Date("2011-01-01")+0:9, temp=rnorm(10) )
dflist <- list(dfone.DAT=df1,dftwo.DAT=df2)
ListOfZoos <- lapply(dflist, makeNamedZoo) 
names(ListOfZoos) <- paste( sub("DAT$", "", names(dflist) ), "zoo", sep="")

$dfone.zoo
2011-01-01 2011-01-02 2011-01-03 2011-01-04 2011-01-05 2011-01-06 2011-01-07 
 0.7869056  1.6523928 -1.1131432  1.2261783  1.1843587  0.2673762 -0.4159968 
2011-01-08 2011-01-09 2011-01-10 
-1.2686391 -0.4135859 -1.4916291 

$dftwo.zoo
2011-01-01 2011-01-02 2011-01-03 2011-01-04 2011-01-05 2011-01-06 2011-01-07 
 0.7356612 -0.1263861 -1.6901240 -0.6441732 -1.4675871  2.3006544  1.0263354 
2011-01-08 2011-01-09 2011-01-10 
-0.8577544  0.6079986  0.6625564 
tozoo <- function(x) zoo(x$temp, x$date) 
data1.zoo <- do.call(merge, lapply(split(data1, data1$Filename), tozoo))