Aylık bir veri data.table
ve yıllık verileri başka bir data.table
var ve şimdi yıllık verileri aylık verilerdeki ilgili gözlemle eşleştirmek istiyorum.Verilerdeki data.table etkinliğinde çoğaltma yollarım var mı?
Benim yaklaşımım şu şekildedir: Her ay için yıllık verileri çoğaltma ve ardından aylık ve yıllık verilere katılma. Ve şimdi satırların çoğaltılması ile ilgili bir sorum var. Bunu nasıl yapacağımı biliyorum ama bunu yapmanın en iyi yolu olup olmadığından emin değilim, bu yüzden bazı görüşler harika olurdu.
İşte benim yıllık veriler için bir exemplatory data.table DT
ve ben şu anda çoğaltmak nasıl:
library(data.table)
DT <- data.table(ID = paste(rep(c("a", "b"), each=3), c(1:3, 1:3), sep="_"),
values = 10:15,
startMonth = seq(from=1, by=2, length=6),
endMonth = seq(from=3, by=3, length=6))
DT
ID values startMonth endMonth
[1,] a_1 10 1 3
[2,] a_2 11 3 6
[3,] a_3 12 5 9
[4,] b_1 13 7 12
[5,] b_2 14 9 15
[6,] b_3 15 11 18
#1. Alternative
DT1 <- DT[, list(MONTH=startMonth:endMonth), by="ID"]
setkey(DT, ID)
setkey(DT1, ID)
DT1[DT]
ID MONTH values startMonth endMonth
a_1 1 10 1 3
a_1 2 10 1 3
a_1 3 10 1 3
a_2 3 11 3 6
[...]
son istediğim tam olarak ne katılmak. Ancak, DT[, list(MONTH=startMonth:endMonth), by="ID"]
zaten diğer sütunları DT
'a eklemek dışında istediğim her şeyi yapıyor, bu yüzden kodumdaki son üç satırdan, yani setkey
ve join
işlemlerinden kurtulabilir miyim diye merak ediyordum. Bu, sadece aşağıdakileri yapabilirsiniz, çıkıyor: Ben list
ifadeye sütun adları kodlanmış çünkü
#2. Alternative: More intuitiv and just one line of code
DT[, list(MONTH=startMonth:endMonth, values, startMonth, endMonth), by="ID"]
ID MONTH values startMonth endMonth
a_1 1 10 1 3
a_1 2 10 1 3
a_1 3 10 1 3
a_2 3 11 3 6
...
Ancak bu, yalnızca çalışır. Gerçek verilerimde, tüm sütunların isimlerini önceden bilmiyorum, bu yüzden'unumaralı sütunu, yukarıdaki gibi ve diğer tüm sütunları DT
olarak gösterdiğim şekilde döndürüp döndüremeyeceğimi anlayabiliyordum. .SD
hile yapabilmek için görünüyordu, ama:
DT[, list(MONTH=startMonth:endMonth, .SD), by="ID"]
Error in `[.data.table`(DT, , list(YEAR = startMonth:endMonth, .SD), by = "ID") :
maxn (4) is not exact multiple of this j column's length (3)
yüzden bu yapıldı nasıl olduğunu özetlemek için, ama yine de mücadele ediyorum çünkü bunu yapmak için en iyi yoldur diye merak edildi data.table
sözdizimi ile biraz ve genellikle yazılarda ve wiki'de okumak iyi ve kötü şeyler yapmanın yollarının olduğunu. Ayrıca, .SD
kullanırken neden hata alıyorum. Tüm sütunları istediğinizi data.table
bildirmenin kolay bir yolu olduğunu düşündüm. Ne özledim
teşekkür. Ben koştum (v1.8.7) ama ben 'NA' göremiyorum. Hangi sürüme sahipsiniz? –
Teşekkürler. Hala 'NA' görmüyorum ama şimdi iki uyarı olsun hem özdeş:' 1'de: rep: sayısal ifade 2 öğesi vardır: sadece ilk used' –
deneyin en son (796) daha sonra ilk adım, lütfen, sadece üzere yönetin. –