n
'dan küçük veya ona eşit olan elemanların toplamına dayalı olarak bir vektörü gruplamak istiyorum. Eğer toplamı 15 den asla büyüktür görebileceğiniz gibi bunların toplamı yaniKoşullu toplamda grup vektörü
y <- c(1, 1, 1, 2, 2, 3, 4, 5 ,5, 5, 6, 6, 6, 7, 7, 8, 8, 9, 9, 10)
, < = 15 iken aşağıdakileri varsayalım
set.seed(1)
x <- sample(10, 20, replace = TRUE)
#[1] 3 4 6 10 3 9 10 7 7 1 3 2 7 4 8 5 8 10 4 8
#Where,
n = 15
beklenen çıkışı
, grup değerlerine olurdusapply(split(x, y), sum)
# 1 2 3 4 5 6 7 8 9 10
#13 13 9 10 15 12 12 13 14 8
NOT: Bunu büyük veri kümelerinde (genellikle> 150 - 200 GB) çalıştırıyorum, dolayısıyla verimliliğin bir zorunluluktur.
Bu çalışır, ancak muhtemelen geliştirilebilir
as.integer(cut(cumsum(x), breaks = seq(0, max(cumsum(x)) + 15, 15)))
#[1] 1 1 1 2 2 3 3 4 4 4 5 5 5 6 6 6 7 8 8 8
[burada] (https://stackoverflow.com/questions/34531568/conditional-cumsum-with-reset) ve Rcpp uygulamasının [here] sayfasını kontrol ettiniz (https://stackoverflow.com/questions/29054459/nasıl yapılır/hız-up-or-vectorize-a-for-döngüsü/29055443 # 29055443) – akrun
@akrun Linkler için teşekkürler. Onları – Sotos
olarak okuyacağım, evet bir kopya, @akrun burada da genelleştirilebilecek bir çözümünüz var: https://stackoverflow.com/questions/44512075/resetting-cumsum-if-value-goes-to- negatif-in-r –