Bir sütunun değerini önceki satırlardaki değerine bakarak, bir sütunun değerini güncellemek için data.table
işlevlerini kullanmak istiyorum. İşte zaten data.table
aşağıdaki gibi bir yolla önceki satırları başvurabilir biliyorduÖnceki satırdaki sütun değerlerini güncelleme
> DT<-data.table(id=1:2,x=1:10,y=1)
bir örnek:
> DT[,z:=cumsum(y),keyby=id]
> DT[]
id x y z
1: 1 1 1 1
2: 1 3 1 2
3: 1 5 1 3
4: 1 7 1 4
5: 1 9 1 5
6: 2 2 1 1
7: 2 4 1 2
8: 2 6 1 3
9: 2 8 1 4
10: 2 10 1 5
Ancak, sonraki örnekte nerede kullanarak Fibonacci
serisini oluşturmaya çalışırken, çalışmayan kendisini güncellemek için y
numaralı sütundaki önceki değerler. Data.table, iteratif hesaplama yapmak için bir döngü kullanmıyor gibi görünüyor. data.table
kullanarak bu tür problemi nasıl çözebilirim?
> DT[,y:=shift(y,1,fill=0)+shift(y,2,fill=0),]
> DT[]
id x y z
1: 1 1 0 1
2: 1 3 1 2
3: 1 5 2 3
4: 1 7 2 4
5: 1 9 2 5
6: 2 2 0 1
7: 2 4 1 2
8: 2 6 2 3
9: 2 8 2 4
10: 2 10 2 5
Ne gerçekten istediğiniz altındadır (sütun y
güncellenir):
id x y z
1: 1 1 1 1
2: 1 3 1 2
3: 1 5 2 3
4: 1 7 3 4
5: 1 9 5 5
6: 2 2 1 1
7: 2 4 1 2
8: 2 6 2 3
9: 2 8 3 4
10: 2 10 5 5
Özellikle bir "fibonacci" dizisinden veya daha genel bir yanıtdan sonra mısınız? – SymbolixAU
Cevabınız için teşekkürler, bu tür bir sorun için daha genel cevaplar arıyorum, 'fibonacci' sadece bir örnektir – xappppp