Daha verimli depolama ve alma için bir veri çerçevesini yeniden şekillendirmeye çalışıyorum. Her satır, satırlar arasında benzersiz olmayan bir "ana" (anahtar) değeri ve bir alt değer (aslında, 3 öznitelik - 1 karakter ve 2 sayısal) kümesi içerir. Bu veri çerçevesini, her bir ana üst anahtar için yalnızca bir üst düzey girişe sahip bir listeye ve üst öğe ile ilişkilendirilen çocukların sayısına göre belirlenen bir dizi alt listeye dönüştürmek istiyorum. İşte bazı örnek veriler şunlardır: Bunun için çıkış adlandırılmış üyeleri $child
ve $count
(sub-listelerinin 4 üst düzey ("middle", "might", "million", "millions"
adlandırılır) elemanları ve değişen sayılarla listesi olmamalıdırBir veri çerçevesini keyfi uzunluk listelerinin listesine nasıl verimli bir şekilde dönüştürebilirim?
pcm <- data.frame(parent = c("middle", "middle", "might", "might",
"might", "million", "million", "millions"),
child = c("of", "school", "be", "have", "not", "in",
"to", "of"),
count = c(476, 165, 1183, 619, 321, 490, 190, 269))
örn lookup4[["middle"]]
alt içeriyor -lists $children[[1]]$child
= "of"
, $count
= 476
ve = "school"
$children[[2]]$child
, $count
= 165
).
Aşağıdaki kod çalışır, ancak çok yavaştır (8 GB RAM kullanarak 300.000 satırlık bir veri karesinde birkaç saat). Çıktı verisindeki çocukların sayısına 6 sınır koymuştum, ama büyük bir fark yaratmamış gibi görünüyor.
lookup4 <- list()
parents <- unique(pcm$parent)
n.parents <- length(parents)
for (i in 1:n.parents) {
words <- pcm$child[pcm$parent == parents[i]]
counts <- pcm$count[pcm$parent == parents[i]]
probs <- pcm$prob[pcm$parent == parents[i]]
n.children <- min(c(NROW(words), 6)
ngram.tail <- list()
for (k in 1:n.children) {
ngram.tail[[k]] <- list(word = words[k],
count = counts[k],
prob = probs[k])
}
lookup4[[parents[i]]] <- list(children = ngram.tail)
}
'for' döngüsünü kaldırarak hızlandırabilir miyim? Eğer öyleyse, dönüşümü nasıl kodlarım?
neler pcm mi? Lütfen küçük bir yeniden üretilebilir örnek ve çıktı alınabilir çıktı – akrun
Lütfen önerilen bir soru göndermek için http://stackoverflow.com/help/mcve~~pobj okuyun –
'split (pcm [, c (" child "," count "," prob ")], pcm $ parent) 'ilk adım olmalıdır. Sonra, birden çok satır içeren bir 'data.frame' yerine birçok alt listeye sahip olmanın nedeni nedir? Bölünmüş (...) 'nin çıktısının yeterli olması gerektiğini düşünüyorum. – nicola