2016-03-24 18 views
1

2 veri çerçevesinin colB satır sırasına göre bir satır karşılaştırma yaptım (her iki veri çerçevesinin de aynı sıra sütunları var)% 98 özdeş olduklarını ve 2 arasındaki tek fark olduğunu öğrendim sütun değerlerden bazıları çiftleri şöyle açık edildi edilmiştir:R - Verilerin alt kümesini kullanarak tüm satırların yeniden düzenlenmesi

df1$colB df2$colB 
    A   B 
    B   A 
    1   1 
    C   D 
    D   C 

I

subset(df1, df1$colB != df2$colB) 

colB

$ df2 DF1 $ colB eşit değilken altkümesini aldı satır oluşumu kullanmak için bir yol var df1'in tüm satırlarını yeniden düzenlemek için yukarıdaki alt kümeden df1 $ colB ve df2 $ c'den tüm değerler olB şimdi eşleşiyor mu?

+2

Modelin (belki de 10 satır) ve birkaç kolonun daha fazlasını eklemenize yardımcı olur. Doğru çözüm, desene bağlıdır ve bu sayede verilerin daha fazla ayrıntı sağlamasına yardımcı olur. –

+0

İkisini de 'sipariş etmelisiniz'. Her zamanki sözdizimi, her ikisi için yapmanız gereken mtcars [order (mtcars $ drat)] gibi bir şeydir. Birleşmeler de bir olasılıktır; dplyr :: anti_join' özellikle yararlı olabilir. – alistaire

+2

Ne yapmak istediğiniz konusunda net değil, ama 'birleştirme' sizi doğru yöne yönlendirebilir mi? – Ananta

cevap

2

Bunun için subset'un doğru işlev olduğunu düşünmüyorum. Mantıksal bir vektör olarak ikinci argüman olarak (“karışık” olarak da adlandırılan) (“karışık” olarak da adlandırılır) ve böylece herhangi bir sıralama yeteneği yoktur. Bunun yerine match ve [ kullanın:

df1[ match(df1$colB, df2$colB), ] 
    X1.5 colB 
2 2 B 
1 1 A 
3 3 1 
5 5 D 
4 4 C 

Ama NA adlı ve colB diğer değerler, ben karar verdik vardı df2 bir biraz daha karmaşık bir versiyonu ile test sonrasında merge ait Ananta önerisi (gitmek daha güvenli bir yoldur @ olduğunu ancak istenen sırayı almak için ilk argüman olarak df2 ile):

> merge(df2,df1)[ names(df1) ] 
    X1.5 colB 
1 3 1 
2 1 A 
3 2 B 
4 4 C 
5 5 D