2015-05-14 14 views
5

göre gruplama ise bir kimlik ve bir veri rulo olabilir, bu post öğrenilebilir da IR: ID'leri

ID <- c("A","A","A","A","B","B","B","B") 
Type <- c(45,45,46,46,45,45,46,46) 
Point_A <- c(10,NA,30,40,NA,80,NA,100) 
Point_B <- c(NA,32,43,NA,65,11,NA,53) 
df <- data.frame(ID,Type,Point_A,Point_B) 

    ID Type Point_A Point_B 
1 A 45  10 NA 
2 A 45  NA 32 
3 A 46  30 43 
4 A 46  40 NA 
5 B 45  NA 65 
6 B 45  80 11 
7 B 46  NA NA 
8 B 46  100 53 

var bir veri çerçevesi vardır toplamı UA'lar içerikli kolon değerlerini rulo sütunu.

Şu anda satırları ve grubu kimliğe ve Tür'e göre toplamak için sqldf kullanıyorum. Bu benim için iş yaparken, daha büyük bir veri kümesinde çok yavaş.

df1 <- sqldf("SELECT ID, Type, Sum(Point_A) as Point_A, Sum(Point_A) as Point_A 
        FROM df 
        GROUP BY ID, Type") 

Lütfen bu sorunu çözecek başka tekniklerin kullanımını önerin. Dplyr & plyr paketlerini öğrenmeye başladım ve çok ilginç buluyorum ama nasıl uygulayacağımı bilmiyorum.

İstenilen Çıktı dplyr Kullanılması

ID Type Point_A Point_B 
1 A 45  10 32 
2 A 46  70 43 
3 B 45  80 76 
4 B 46  100 53 

cevap

4

:

df %>% group_by(ID, Type) %>% summarise_each(funs(sum(., na.rm = T))) 

Ya

df %>% 
    group_by(ID, Type) %>% 
    summarise(Point_A = sum(Point_A, na.rm = T), 
      Point_B = sum(Point_B, na.rm = T)) 

Ya

verir

:

#Source: local data frame [4 x 4] 
#Groups: ID 
# 
# ID Type Point_A Point_B 
#1 A 45  10  32 
#2 A 46  70  43 
#3 B 45  80  76 
#4 B 46  100  53 
+0

Steven, bu soruya da bana yardımcı olduğunuz için tekrar teşekkürler. Bu dplyr paketi her zaman beni şaşırtıyor. :-) Daha büyük bir veri kümesinde süper hızlıdır. – Sharath

+1

Neden "summarise_each()" ?? – Arun

+0

@Arun Küçük sorularla benzer soruları yanıtlıyordum ve en basit yöntemi eklemeyi unuttum. –

9
library(data.table) 

DT <- as.data.table(df) 
DT[, lapply(.SD, sum, na.rm=TRUE), by=list(ID, Type)] 

    ID Type Point_A Point_B 
1: A 45  10  32 
2: A 46  70  43 
3: B 45  80  76 
4: B 46  100  53 
+0

Ricardo, O cazibe gibi çalışır :) ama şu anda bu öğreniyorum beri data.table üzerinde dplyr kullanımını tercih etmektedirler. – Sharath