2016-04-01 12 views
1

Merhaba dplyr'u kullanarak tüm satırlarda bir değişkenin ortalamasını bir beklemeye bulmaya çalışıyorum. dplyr beri böyle kullanabileceğini düşündüm, row_number() denilen uygun bir işlev sunar:R'de dplyr kullanarak bir çıkış ortalamasının nasıl hesaplanır?

library(dplyr) 

iris %>% 
    tbl_df %>% 
    select(Sepal.Length) %>% 
    mutate(loo_avg=mean(Sepal.Length[-row_number()])) # leave one out average 

Ama bu böyle bir sonuç döndürür: Bu nasıl düzeltebilirim

Source: local data frame [150 x 2] 

    Sepal.Length loo_avg 
      (dbl) (dbl) 
1   5.1  NaN 
2   4.9  NaN 
3   4.7  NaN 
4   4.6  NaN 
5   5.0  NaN 
6   5.4  NaN 
7   4.6  NaN 
8   5.0  NaN 
9   4.4  NaN 
10   4.9  NaN 
..   ...  ... 

?

+1

Belki de aradığınız şey bu olabilir: http://stackoverflow.com/questions/35858876/calculate-group-mile-exile-excluding-current-observation-using-dplyr/35859197#35859197 – mtoto

+0

@mtoto That oldukça düzgün! . Ama ... eğer ortalamadan daha karmaşık bir işlev kullanmak istersem? Ben alt soruyu kullanan bir yol var mı diye baktım .. – Alby

+1

bağlantılı sorunun akrun yorumuna bakın. – mtoto

cevap

2

Özellikle data.table yöntemle gibi: Bu yaklaşım aynı zamanda inanılmaz derecede kolay j yılında mean yanında istediğini yapmak için yapar

library(data.table) 

DT <- as.data.table(iris) 

DT[ , loo_avg := DT[-.BY$left_out, mean(Sepal.Length)], 
    by = .(left_out = 1:nrow(DT)) 
    ][,.(Sepal.Length, loo_avg)] 
#  Sepal.Length loo_avg 
# 1:   5.1 5.848322 
# 2:   4.9 5.849664 
# 3:   4.7 5.851007 
# 4:   4.6 5.851678 
# 5:   5.0 5.848993 
# ---      
# 146:   6.7 5.837584 
# 147:   6.3 5.840268 
# 148:   6.5 5.838926 
# 149:   6.2 5.840940 
# 150:   5.9 5.842953 

Not.

İlgili konular