2011-09-13 35 views
6

Birisi, aynı sütuna birden çok işlevi nasıl uygulayabileceğimizi işaret edebilir (bu, sonucun ayrı sütunlarda elde edilebilmesi için) (veya başka herhangi bir yöntem, plyr, vb.). BenTapply kullanarak sütuna birden çok işlev uygulayın

User MoneySpent 
Joe  20 
Ron  10 
Joe  30 
... 

ile dataframe varsa için mesela. Ben Görünme MoneySpent + sayısının toplamı olarak sonuç almak istiyoruz.

ben gibi bir işlevi kullanılır -

f <- function(x) c(sum(x), length(x)) 
tapply(df$MoneySpent, df$Uer, f) 

Ama bu sütunlara bölmek değil, diyelim ki gibi önceden

Joe Joe 100, 5 # The sum=100, number of occurrences = 5, but it gets juxtaposed 

Teşekkür,

  • Raj şey verir .

cevap

8

Kesinlikle plyr paketinden ddply kullanarak bu gibi şeyler yapabilirsiniz:

dat <- data.frame(x = rep(letters[1:3],3),y = 1:9) 

ddply(dat,.(x),summarise,total = NROW(piece), count = sum(y)) 
    x total count 
1 a  3 12 
2 b  3 15 
3 c  3 18 

İsterseniz, sadece ikisinin ötesinde, daha özet fonksiyonları listeleme tutabilir. Not'u piece olarak adlandırılan ddply numaralı iç değişkeni çağırmak konusunda biraz zorlandığımı unutmayın. Bunun yerine length(y) gibi bir şey yapmış olabilirsiniz.

+0

Mükemmel çözüm! Teşekkürler – xbsd

+0

Plyr hakkında daha fazla bilgiyi okuyabileceğim herhangi bir kaynak var mı? CRAN'daki pdf kullanım hakkında çok sınırlı bilgiye sahiptir. – xbsd

+0

@xbsd - tartışmasız en kapsamlı bilgi kaynaklarından biri, ya plyr' etiketi altında, ya da sadece R etiketi ile "plyr" için arama olacaktır: http://stackoverflow.com/search?q= [ r] + plyr – Chase

4

ddply() kavramsal net olduğu; (Ve muhtemelen gerekir.. Ben yapmak ve sadece length() kullanmayın olarak, Dediğimi yap bence, iç değişken piece gelecekteki sürümlerinde çalışması garanti edilmez referans), fakat bazen hız nedenleriyle yerine tapply kullanmak yararlıdır, bu durumda aşağıdaki gibi çalışır:

do.call(rbind, tapply(df$MoneySpent, df$User, f)) 
İlgili konular