Veri listesi hızlı vectorized birleştirme.satır çerçeveleri
Veri birleştirme hakkında sorular en.BÖYLECE listelerde çerçeve oldukça burada kızdırmak istediğim ilişki yok, ama beni yanlış kanıtlamak için çekinmeyin.
Veri listesi var.Kare. ""Başka bir veri.satır rbind etmek istiyorum satır Kare. Aslında, ilk satır bir veri formu.çerçeve, ikinci satır ikinci veri.çerçeve ve benzeri. Neden benim orijinal veri satır sayısı olarak aynı uzunlukta bir liste olurdu.çerçeve(s). Şimdiye kadar, veri.çerçeve boyutları aynıdır.
Burada oynamak için bazı veriler.
sample.list <- list(data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)),
data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)),
data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)),
data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)),
data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)),
data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)),
data.frame(x = sample(1:100, 10), y = sample(1:100, 10), capt = sample(0:1, 10, replace = TRUE)))
Burada iyi ol' döngü için. buldum da ne
#solution 1
my.list <- vector("list", nrow(sample.list[[1]]))
for (i in 1:nrow(sample.list[[1]])) {
for (j in 1:length(sample.list)) {
my.list[[i]] <- rbind(my.list[[i]], sample.list[[j]][i, ])
}
}
#solution 2 (so far my favorite)
sample.list2 <- do.call("rbind", sample.list)
my.list2 <- vector("list", nrow(sample.list[[1]]))
for (i in 1:nrow(sample.list[[1]])) {
my.list2[[i]] <- sample.list2[seq(from = i, to = nrow(sample.list2), by = nrow(sample.list[[1]])), ]
}
Bu geliştirilmiş çok brainhurt kullanmadan vektörleştirme? Doğru cevap bir kod parçacığını, tabii ki içerir. "Evet" gibi bir cevap sayılmaz.
EDİT
#solution 3 (a variant of solution 2 above)
ind <- rep(1:nrow(sample.list[[1]]), times = length(sample.list))
my.list3 <- split(x = sample.list2, f = ind)
KIYASLAMA
Listemi veri başına daha fazla satır ile daha büyük yaptım.çerçeve. Genel olarak sonuçlar şöyle: karşılaştırılan ettim
#solution 1
system.time(for (i in 1:nrow(sample.list[[1]])) {
for (j in 1:length(sample.list)) {
my.list[[i]] <- rbind(my.list[[i]], sample.list[[j]][i, ])
}
})
user system elapsed
80.989 0.004 81.210
# solution 2
system.time(for (i in 1:nrow(sample.list[[1]])) {
my.list2[[i]] <- sample.list2[seq(from = i, to = nrow(sample.list2), by = nrow(sample.list[[1]])), ]
})
user system elapsed
0.957 0.160 1.126
# solution 3
system.time(split(x = sample.list2, f = ind))
user system elapsed
1.104 0.204 1.332
# solution Gabor
system.time(lapply(1:nr, bind.ith.rows))
user system elapsed
0.484 0.000 0.485
# solution ncray
system.time(alply(do.call("cbind",sample.list), 1,
.fun=matrix, ncol=ncol(sample.list[[1]]), byrow=TRUE,
dimnames=list(1:length(sample.list),names(sample.list[[1]]))))
user system elapsed
11.296 0.016 11.365
CEVAP
Bunu deneyin:
bind.ith.rows <- function(i) do.call(rbind, lapply(sample.list, "[", i, TRUE))
nr <- nrow(sample.list[[1]])
lapply(1:nr, bind.ith.rows)
'/veri birleştirme katılmak için ...
Nasıl (birleştirme) veri çerçevesi (iç...
'hızlı bir şekilde yorum yapmak n...
Vim birleştirme birden fazla satır (ik...
Çekirdek Veri: Hızlı bir işletmenin tü...