2011-09-25 4 views
0

各位R・ユーザー・コミュニティのdata.framesに関数を適用し、質問 - リスト

21のリストに(一つだけdata.frameを次のように私は、リスト内の多くのdata.framesを持っています

> BallitoRaw.zoo <- zoo(datal$BallitoRaw.DAT$temp, datal$BallitoRaw.DAT$date) 

動物園のオブジェクトは、次のようになります。私は、リスト内の各data.frame上で動作している場合、個別に私のような、TEMPおよび日から動物園のオブジェクトを作成することができます

> str(datal) 
List of 21 
$ BallitoRaw.DAT    :'data.frame': 1083 obs. of 3 variables: 
    ..$ Filename: Factor w/ 21 levels "BallitoRaw.DAT",..: 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ date :Class 'Date' num [1:1083] 7318 7319 7320 7321 7322 ... 
    ..$ temp : num [1:1083] NA 25.8 NA NA NA NA NA NA NA 24.4 ... 

:)便宜上示しますこれ:

> head(BallitoRaw.zoo) 
1990-01-14 1990-01-15 1990-01-16 1990-01-17 1990-01-18 1990-01-19 
     NA  25.8   NA   NA   NA   NA 

リスト全体を一度に処理するには、llplyまたはapply(または同様の方法)を使用するにはどうすればよいですか?

出力は、data.framesの新しいリスト、または一連の独立したdata.frames(上記のzooの例のように名前が付けられています)に移動する必要があります。日付列には、通常の時系列(日数)には欠けている日付(既存の日付のtemのためのNAsに加えて)が含まれています。欠落している日付は動物園の機能によって満たされます。したがって、動物園オブジェクトを伴う出力data.frameは元のものよりも長くなります。

親切に感謝します。ここで

答えて

3
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="") 

は、簡単なテストケースである:

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 
1

これは私が必要なものを達成する簡単な方法です:

tozoo <- function(x) zoo(x$temp, x$date) 
data1.zoo <- do.call(merge, lapply(split(data1, data1$Filename), tozoo)) 

結果は素敵な動物園のオブジェクトです。