2016-03-23 18 views
1

Etrafa bakmak için epey zaman harcadım ve özel soruma bir çözüm bulamıyorum. Herhangi bir yardım için minnettar olurum.Birden çok veri çerçevesinin birleştirilmesi ve yinelenen sütunların toplanması

Csv dosyalarının bir listesinin hepsinde (örneğin, aşağıdaki örnekte "Satır" başlıklı) tür adları içeren bir sütun var. Her bir csv dosyasında, bazıları csv dosyalarının hepsinde benzersiz olan ve bazıları bir dizi csv dosyasında bulunan bir dizi örnek vardır. Birden fazla csv dosyasında görünen herhangi bir örneği toplarken, tüm bu csv dosyalarını "Row" değişkeninde birleştirmenin bir yolunu arıyorum. İki veri çerçeveleri birleştirilir

dfrm_1 <- data.frame(a = c("species1", "species2", "species3", "species9"), b= c(100,5,24,100), c=c(52,151,15,100)) 
dfrm_2 <- data.frame(a = c("species2", "species4", "species6", "species9"), b= c(4,2,500,100), c=c(67,98,153,100)) 
names(dfrm_1) <- c("Row", "S1", "S2") 
names(dfrm_2) <- c("Row", "S2", "S4") 

mDF <- merge(dfrm_1, dfrm_2, by="Row", all=TRUE) 

, Numune 2 (her iki veri çerçeveleri içinde mevcut olan S2) S2.x ve S2.y. olur: Bir örnek olarak

Mektup ekini ekleyen birleştirme işlevi yerine, yalnızca iki sütunu toplamak istiyorum.

İstenen çıkış geçerli:

df_merge <- data.frame(a=c("species1", "species2", "species3", "species9", "species4", "species6"), b=c(100,5,24,100,0,0), c=c(52,155,15,200,2,500), d=c(0,67,0,100,98,153)) 
names(df_merge) <- c("Row", "S1", "S2", "S4") 

Not: verileri eklemek istediğiniz yerine veri birleştirme Ancak örnek genişletmek ve istenen çıktı üretmesi

cevap

1

Sen yakınsın içerecek şekilde düzenlenebilir. Aşağıdaki kod istediğiniz şeyi alacaktır.

library(dplyr) 
rbind_list(dfrm_1, dfrm_2) %>% 
    group_by(Row) %>% 
    mutate_each(funs(sum(., na.rm = TRUE))) %>% 
    unique() 
+0

Netlik eksikliğinden dolayı özür dilerim, istediğim çıktıyı sağlamak için orijinal sorumu düzenledim. Burada sahip olduğunuz kod çok yakındır, ancak birden fazla ortak türü olan genişletilmiş bir örnek üzerinde denediğimde, bunları doğru bir şekilde özetlemez. Örneğin, yukarıdaki güncellenen örnek kodda, türler toplamı 155'e doğru toplamlar ancak türler 200'ün toplamı 100 olduğunda toplam 100 değerini verir. – EpiBlake

+0

@EpiBlake, iyi bir nokta, cevabımı düzenledim. Şimdi çalışıyor –

İlgili konular