Как создать самокопирующий вектор в R - PullRequest
3 голосов
/ 08 октября 2010

Я думаю, это очень легко, но мой R кунг-фу слаб.Я пытаюсь создать вектор сам по себе в совокупности.Этот код работает, но я бы хотел что-то более элегантное и автоматизированное.У меня есть миллионы строк, которые нужно собрать.

a <- c(4,4,5,1,9)
a <- a[order(-a[])]
k <- a[1:length(a)]/sum(a)
w <- c(k[1],k[1]+k[2],k[1]+k[2]+k[3],k[1]+k[2]+k[3]+k[4],k[1]+k[2]+k[3]+k[4]+k[5])
w

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

Вы имели в виду cumsum()?

> a <- c(4,4,5,1,9)
> a <- a[order(-a[])]            # just calling sort is shorter too
> k <- a[1:length(a)]/sum(a)     # long way  
> k 
[1] 0.391304 0.217391 0.173913 0.173913 0.043478
> k <- a/sum(a)                  # same, but shorter
> k  
[1] 0.391304 0.217391 0.173913 0.173913 0.043478
> ck <- cumsum(k) 
> ck  
[1] 0.39130 0.60870 0.78261 0.95652 1.00000 
>   

Редактировать Я упустил еще одно упрощение:

> a <- c(4,4,5,1,9)
> ck <- cumsum( sort(a, decr=TRUE) / sum(as) ) 
> ck  
[1] 0.39130 0.60870 0.78261 0.95652 1.00000 
>   

Вы хотите sort() здесь, а не order() в сочетании с индексацией.

0 голосов
/ 08 октября 2010

Бинг - мой друг ... Я нашел функцию cumsum ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...