2013-02-11 7 views
13

मैं आर में वर्ण चर के वर्णमाला क्रम द्वारा डेटा फ्रेम को सॉर्ट करना चाहता हूं। मैंने इसे ऑर्डर() फ़ंक्शन के साथ करने का प्रयास किया है, लेकिन यह मेरे डेटा फ्रेम को एक सूची में बदल देता है। क्या किसी के पास सुराग है?आर में वर्ण चर के वर्णमाला क्रम द्वारा डेटा फ्रेम को सॉर्ट करने के लिए कैसे करें?

+6

SO में आपका स्वागत है! क्या आप पोस्ट कर सकते हैं जो आपने करने की कोशिश की (कोड और डेटा)? – juba

उत्तर

32

ठीक है, मुझे कोई समस्या नहीं यहाँ मिल गया है:

df <- data.frame(v=1:5, x=sample(LETTERS[1:5],5)) 
df 

# v x 
# 1 1 D 
# 2 2 A 
# 3 3 B 
# 4 4 C 
# 5 5 E 

df <- df[order(df$x),] 
df 

# v x 
# 2 2 A 
# 3 3 B 
# 4 4 C 
# 1 1 D 
# 5 5 E 
6
#sort dataframe by col 
sort.df <- with(df, df[order(sortbythiscolumn) , ]) 

#can also sort by more than one variable: sort by col1 and then by col2 
sort2.df <- with(df, df[order(col1, col2) , ]) 

#sort in reverse order 
sort2.df <- with(df, df[order(col1, -col2) , ]) 
+0

मुझे नहीं लगता कि यह अभी तक स्पष्ट है, कि 'col1' यहां' df $ col1' होना चाहिए। अगर आप इस हिस्से को संपादित कर सकते हैं तो मुझे अप-वोट करने में खुशी होगी। और आप शायद यहां 'साथ' का अच्छा उपयोग भी जोड़ सकते हैं! – Arun

+3

(+1) मैं 'df [with (df, order (col1, col2)),]' का उपयोग करना चाहता हूं, लेकिन दोनों ही नीचे समान प्रतीत होते हैं। – Arun

3

उपयोग order समारोह:

set.seed(1) 
DF <- data.frame(ID= sample(letters[1:26], 15, TRUE), 
       num = sample(1:100, 15, TRUE), 
       random = rnorm(15), 
       stringsAsFactors=FALSE) 
DF[order(DF[,'ID']), ] 
    ID num  random 
10 b 27 0.61982575 
12 e 2 -0.15579551 
5 f 78 0.59390132 
11 f 39 -0.05612874 
1 g 50 -0.04493361 
2 j 72 -0.01619026 
14 j 87 -0.47815006 
3 o 100 0.94383621 
9 q 13 -1.98935170 
8 r 66 0.07456498 
13 r 39 -1.47075238 
15 u 35 0.41794156 
4 x 39 0.82122120 
6 x 94 0.91897737 
7 y 22 0.78213630 

एक अन्य समाधान डोबी पैकेज से orderBy फ़ंक्शन का उपयोग किया जाएगा:

> library(doBy) 
> orderBy(~ID, DF) 
5

arrangeplyr पैकेज में फ़ंक्शन एकाधिक कॉलम द्वारा सॉर्ट करना आसान बनाता है। उदाहरण के लिए, सॉर्ट करने के लिए DFID पहले और उसके बाद num द्वारा कम करके, आप

plyr::arrange(DF, ID, desc(num)) 
0

यह वास्तव @ रामनाथ के जवाब के साथ अंतर्गत आता है लिख सकते हैं लेकिन जैसा कि मैंने अभी तक पर्याप्त प्रतिष्ठा नहीं है मैं टिप्पणी नहीं कर सकता। आप plyr पैकेज के साथ dplyr पैकेज से arrange फ़ंक्शन का भी उपयोग कर सकते हैं।

library(dplyr) 
arrange(DF, ID, desc(num)) 
0

कॉलम के स्तर या कारक होने पर ऑर्डर() फ़ंक्शन विफल रहता है। स्ट्रिंग्सएफ़ैक्टर्स = FALSE का उपयोग डेटा.फ्रेम निर्माण में किया जाता है जब यह ठीक से काम करता है।

संबंधित मुद्दे