SORU
17 Mayıs 2010, PAZARTESİ


Veri listesi dönüştürme bir veri içine Kare R Kare

Bir yerde gerçekten tek büyük veri bir çerçeveye dönüştürmek istediğiniz veri iletimi ile bir liste ile biten bir kod var.

Benzer ama daha karmaşık yapmaya çalıştığı earlier question gelen bazı noktalar var.

İşte ile başlıyorum bir örnek (bu örnek için fena halde basitleştirilmiş):

listOfDataFrames <- vector(mode = "list", length = 100)

for (i in 1:100) {
    listOfDataFrames[[i]] <- data.frame(a=sample(letters, 500, rep=T),
                             b=rnorm(500), c=rnorm(500))
}

Şu anda bu kullanıyorum:

  df <- do.call("rbind", listOfDataFrames)

******** EDİT

hoppala. "Önceki bir söz her şeyi berbat ettim. "öğrendiklerini uygulamak için acele Evet, unlist() sadece düz yanlış. Söz konusu olan yukarıdaki düzenleme yapıyorum.

CEVAP
17 Mayıs 2010, PAZARTESİ


Bir diğer seçenek plyr bir fonksiyonu kullanmak için:

df <- ldply(listOfDataFrames, data.frame)

Bu orijinal daha yavaş

> system.time({ df <- do.call("rbind", listOfDataFrames) })
   user  system elapsed 
   0.25    0.00    0.25 
> system.time({ df2 <- ldply(listOfDataFrames, data.frame) })
   user  system elapsed 
   0.30    0.00    0.29
> identical(df, df2)
[1] TRUE

Benim tahminim do.call("rbind", ...) kullanarak (a) Bir veri yerine bir matris kullanmak gibi bir şey yapabilirsiniz bulacaksınız en hızlı yaklaşım olacak.çerçeveleri ve (b) son matrix önceden ayır ve büyüyen yerine atamak.

1 düzenleyin:

Hadley'in yorum, buraya göre değil, BOZUK rbind.fill en son sürümü:

> system.time({ df3 <- rbind.fill(listOfDataFrames) })
   user  system elapsed 
   0.24    0.00    0.23 
> identical(df, df3)
[1] TRUE

Bu rbind daha kolay, ve çok az daha hızlı (bu zamanlama çok çalışır tutun). Ve anladığım kadarıyla, the version of plyr on github Bu daha bile hızlı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glove and Boots

    Glove and Bo

    1 ŞUBAT 2007
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012
  • Pepsi

    Pepsi

    1 Kasım 2005