2016-04-04 9 views
0

Temel olarak, katılımcıların adını row.names olarak kullandığım ilk bir data.frame'ım vardı. Çeşitli nedenlerden dolayı yığmak zorunda kaldım, sonra verileri uzun formatta birleştirdim ve daha sonra bu verilerin sadece bir oranını seçtiğim bir faktör değişkenine dayanarak. Ve sonra bunu bir araya getirdim, böylece ben de katılımcılarla row.names olarak tekrar geniş veriye sahibim. Ancak, sipariş aynı değildir. Bu yüzden orijinal veriyi yeni verilerle kesişmek istesem, row.names sırasının farklı olması nedeniyle verilerimi dağıtacağım. Sort(), order(), transform() yöntemini denedim ve birkaç soru okudum, ancak bunu yapmanın bir yolunu bulamadım.Başka bir veri çerçevesindeki row.names tabanlı bir data.frame nasıl sipariş edilir?

DF1

  V1   V2   V3 
AAA  24   22   37 
BBB  21   22   33 
CCC  30   32   38 
DDD  21   23   35 

diğer veri çerçevesi aynı dim(), row.names bununla birlikte farklı düzeni vardır. DF2 row.names

BBB 
CCC 
AAA 
DDD 

Elimden sonra cbind (D1, D2) ve çünkü değişkenler rownames ile kalmak böylece rownames (DF2) arasında esaslı DF1 sıralamak ister, yani ediyorum Rownames eşittir, aynı değişken aynı katılımcıya aittir. Aşırı karmaşık olabilir, üzgünüm :)

Temel olarak, tüm data.frame'i (DF1) DF2'deki rownames'e göre yeniden düzenlemek istiyorum.

Bunun bir sorun olduğunu biliyorum, ancak bir çalışma yanıtı bulamadım.

cevap

4

Burada kullanarak, tek seçenek dahili gösterim amacıyla mtcars veri çerçevesi:

# Create new sorted data frame. This is analogous to the second data frame 
# by which you want to sort the first one. 
mtcars.sorted = mtcars[order(rownames(mtcars)),] 

# Sort original data frame by the order of the new data frame 
mtcars[match(rownames(mtcars.sorted), rownames(mtcars)),] 

Yani, senin durumunda, kod şöyle olacaktır:

DF1[match(rownames(DF2), rownames(DF1)), ] 
+0

Mükemmel çalışıyor! çok teşekkürler. Temel olduğunu biliyorum ama bu komutu bulamadım. –

3

kullanabilirsiniz match

> df <- data.frame(a=c("AAA","BBB","CCC"),b=1:3,c=6:8,d=9:11) 
> df 
    a b c d 
1 AAA 1 6 9 
2 BBB 2 7 10 
3 CCC 3 8 11 

> df1 <- data.frame(a=c("CCC","AAA","BBB")) 
> df1 
    a 
1 CCC 
2 AAA 
3 BBB 

> Final_df <- df[match(df1$a,df$a),] ## Here it is 
> Final_df 
    a b c d 
3 CCC 3 8 11 
1 AAA 1 6 9 
2 BBB 2 7 10 
İlgili konular