2012-11-16 19 views
7

Olası Çoğalt: Ben R ve yaşıyorum bir sorunla ilgili bazı Yardım isterdim
R Grouping functions: sapply vs. lapply vs. apply. vs. tapply vs. by vs. aggregate vs.hesaplanması sütununda başka sütundaki değerlere dayalı demektir

:

Bir sütun kimliğiyle ve bir Sütun Emotion ile bir veri çerçevem ​​var (df). ID'deki her bir değer, Emotion'da 40-300 değerine karşılık gelir (bu yüzden belirlenmiş bir sayı değil). Ben ID içinde her j için Emotion tüm i 'nin ortalamasını hesaplamak gerekir. (4, 1, 8)

Herhangi yardım büyük takdir: Yani bu yüzden araçlarının vektör aşağıdaki gibi görünmelidir

df$ID = (1, 1, 1, 1, 2, 2, 3) 
df$Emotion = (2, 4, 6, 4, 1, 1, 8) 

gibi veri görünüyor ne!

+4

-1. Bu soruyu gönderdiğinde, S.O. size birçok olası cevapları sunacak. Bunu göz ardı etmeliydiniz ve bu soruyu yine de paylaştınız, kullanıcı1830937. –

+6

Tam tersine, uzun, uzun bir süre aradım (arama yapmak için yeniyim, belki de arama terimlerimi uygun şekilde ifade etmedim). Verilen cevaplar kadar açık ve doğrudan bir şey bulamadım, bu yüzden soruyu sorduğuma sevindim. –

+1

Ve olası yinelenen öneriniz, henüz aşina olmadığım bir çok jargonun altında gömülüdür. Ama ben öğreniyorum! –

cevap

16

kullanabilirsiniz aggregate

ID = c(1, 1, 1, 1, 2, 2, 3) 
Emotion = c(2, 4, 6, 4, 1, 1, 8) 
df <- data.frame(ID, Emotion) 


aggregate(.~ID, data=df, mean) 
    ID Emotion 
1 1  4 
2 2  1 
3 3  8 

sapply olabilir ayrıca olmak yararlıdır o plyr gelen ddply dahil yapmak için pek çok yolu vardır

sapply(split(df$Emotion, df$ID), mean) 
1 2 3 
4 1 8 

(bu diğer çözüm size bir vektör verecektir) paket, data.table paketi, reshape2 paketinden split ve lapply, dcast diğer kombinasyonları. Daha fazla çözüm için this question'a bakın.

+1

Siz de. Bunu daha önce kaç kez gördük? YANİ. yardım masası değildir. Cevaplayarak ve çoğaltmak için oy vermemekle, S.O.'yi küçümsüyorsunuz. bir yardım masasına. –

+5

Sıklıkla yaptığım şey oylamaya yakın ve hızlı bir cevap veriyor. Bu şekilde, birisinin üzerine düştüğü sorunda bir miktar değer vardır. Ayrıca, birisinin bu soruyu cevaplayıp cevaplamadığı, muhtemelen tekrar oluşma olasılığını etkilemeyecektir. Soru, yinelenen sayılırsa SO sistemi bir temizleme ile yanıt verebilir. Mesajınıza katılıyorum, ama senden farklı bir seçim yapan insanları aldatmaya itiraz ediyorum. –

+0

@PaulHiemstra Yinelenen bağlantıdaki çoğaltma bilgisindeki değer nerede? Birisi _this_ sorusunu cevaplayıp cevaplamadığı sorusu, _this_ sorusunun tekrar sorulup sorulmayacağını etkilemeyebilir, çünkü genel olarak soruların çoğunu sormak (ve gerçekten cevaplamak) sorusunu verecektir.DWin tarafından zaten gösterildiği gibi; yorumunda çok şey söyledi. Seçimlerde, eğer S.O. demokrasiydi. Ama öyle değil. Onların kuralları/rehberlik, benim değil: [ödevini yap] (http://stackoverflow.com/questions/how-to-ask). –

9

Bu, tam olarak tapply numaralı işin yapılması için tasarlanmıştır. İlk önce aramadığım için benden

tapply(df$ID , df$Emotion, mean) 
+0

-1 benden DWin. Bu, akla gelebilecek en basit sorulardan biridir. Çoğaltmak için oy vermeyerek, S.O. bir yardım masasına. –

+1

Bence yöneticiler bize bu mesajı veriyorlar. Moderatörlere bir şeyler atfetmek için cezalar vardır ve ev ödevi etiketi kaldırılmıştır. Yaklaşmak için oylamada size katılacağım, ancak Çoğunda yinelenen ve arabirimin onları işaretlemek için gereken işi teşvik etmek üzere tasarlanmadığı pek çok başka soru var. Karşılık gelen mesaj. –

+0

Karşı mesajın bağlantısı var mı lütfen? –

İlgili konular