2012-03-16 12 views
13

bir veri çerçevesini sıralamak anlamak:R'de data.frame nasıl sıralanır ve filtrelenir?

df[order(df$Height),]

ve bazı yüklem uyan bir veri çerçevesini filtre (ya da alt küme) anlamak:

df[df$Weight > 120,]

ama ben nasıl ve filtrelerini ayırın (örnek olarak, Yükseklik ile sıralayın ve Ağırlığa göre filtreleyin)?

cevap

14

Ya iki adımları

df1 <- df[df$weight > 120, ] 
df2 <- df1[order(df1$height), ] 

veya tek adımda gerekiyorsa

- ama gerçekten herhangi temizleyici değildir. İlk

veri:

R> subset(df, weight > 120)[order(subset(df, weight > 120)$height),] 
    weight height 
9 140.2 111.2 
3 123.6 132.2 
7 135.1 154.3 
4 126.3 154.4 
5 124.0 157.3 
1 133.7 186.1 
R> 

iki adım ile gider:

R> set.seed(42) 
R> df <- data.frame(weight=rnorm(10, 120, 10), height=rnorm(10, 160, 20)) 
R> df 
    weight height 
1 133.7 186.1 
2 114.4 205.7 
3 123.6 132.2 
4 126.3 154.4 
5 124.0 157.3 
6 118.9 172.7 
7 135.1 154.3 
8 119.1 106.9 
9 140.2 111.2 
10 119.4 186.4 

Ve bunu yapmanın bir yolu çift subsetting olduğunu. ,

set.seed(42) 
df <- data.frame(weight=rnorm(10, 120, 10), height=rnorm(10, 160, 20)) 

bir data.table için data.frame dönüştürme ve ağırlığına subsetine: bazı veriler kurmak,

Dirk Eddelbuettel örneğini Borçlanma:

+0

Sadece meraktan dolayı, neden set.seed (42) '? – kohske

+0

"reshape2 :: düzenlemek (altküme (df, ağırlık> 120), yükseklik) kullanıyorum" – baptiste

+0

Uygun Hadley-isms için bekliyordum :-) –

11

paket data.table bir kod kısa hattında bu yapmanızı sağlar yüksekliğine göre sıralama:

library(data.table) 
dt <- data.table(df) 

dt[weight>120][order(height)] 

     weight height 
[1,] 140.1842 111.1907 
[2,] 123.6313 132.2228 
[3,] 135.1152 154.3149 
[4,] 126.3286 154.4242 
[5,] 124.0427 157.3336 
[6,] 133.7096 186.0974 
+0

Güzel. Evet, bu 'data.table'ın en önemli kolaylık özelliklerinden biridir. Yeni kullanıcılar 'data.table' kullanmak için her zaman çevirmek zorunda olduklarını düşünür mü acaba? Bu durumda, ve diğerleri, 'data.frame()' işlevine 'data.table()' ile değiştirilebilir ve ilk etapta 'data.table' ile başladığınızda dönüştürmeye gerek yoktur. Bunu bildiğini biliyorum, bu sadece bir pazarlama sorusu. –

2
df1 <- df[order(df$height), ][df$weight > 120, ] 

Sadece siparişi filtreden önce koyduğunuzdan emin olun.