2011-08-22 12 views
16

में पंक्ति क्रम बदलें मुझे डेटा को ट्रांसफर नहीं करने के लिए पंक्तियों को बदलने/इनवर्ट करने की आवश्यकता है, लेकिन नीचे की पंक्ति को शीर्ष पर ले जाना है और इसी तरह। यदि डेटा फ्रेम था:मैट्रिक्स/डेटाफ्रेम

1 2 3 
4 5 6 
7 8 9 

मैं

7 8 9 
4 5 6 
1 2 3 

में बदलने की जरूरत है मैं sort() के बारे में या पढ़ा है लेकिन मुझे नहीं लगता यह है कि मैं क्या जरूरत है कि मैं ढूँढने में सक्षम नहीं कर रहा हूँ रास्ता।

उत्तर

29

संभवतः अधिक सुरुचिपूर्ण तरीके हैं, लेकिन यह काम करता है:

m <- matrix(1:9, ncol=3, byrow=TRUE) 

# m[rev(seq_len(nrow(m))), ] # Initial answer 
m[nrow(m):1, ] 
    [,1] [,2] [,3] 
[1,] 7 8 9 
[2,] 4 5 6 
[3,] 1 2 3 

यह काम करता है क्योंकि आप पंक्ति सूचकांक के रूप में पूर्णांकों का एक उलट अनुक्रम के साथ मैट्रिक्स का अनुक्रमण कर रहे हैं। nrow(m):1 परिणाम 3 2 1 में परिणाम।

7

मैं, पंक्तियों पंक्तियों की संख्या से आरंभ होने वाला सूचकांक रिवर्स होगा इस लाइन

revdata <- thedata[dim(thedata)[1L]:1,] 
24

आप dplyr पैकेज का उपयोग कर एक data.frame के आदेश को पलट सकता है साथ:

iris %>% arrange(-row_number()) 

या पाइप ऑपरेटर का उपयोग करके

arrange(iris, -row_number()) 
+1

सबसे लोकप्रिय जवाब होना चाहिए imho ... –

+1

या 'आईरिस [आदेश (row.names (परितारिका) , घटती = टी),] ' –

+1

@ वीरेंद्रगड़ेकर मुझे लगता है कि आपका समाधान कम सहज है क्योंकि इसमें" अनाथ "अल्पविराम है, दो बार ब्याज की तालिका निर्दिष्ट करता है, और गोल और वर्ग ब्रैकेट मिश्रण कर रहा है। मुझे पता है कि यह सही बेस-आर वाक्यविन्यास है लेकिन इसमें मेरे स्वाद में कुछ लालित्य नहीं है। –

2

देर से वीरी जी तेज़, किसी भी अतिरिक्त पैकेज की आवश्यकता नहीं है और सरल है:

for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])} 

मुझे लगता है कि लगातार उपयोग के लिए, कोई इससे बाहर निकलता है। आर वी = 3.3.1 के साथ परीक्षण किया गया।

3

हम (data.frame के लिए केवल) row.names का क्रम उलटने कर सकते हैं:

# create data.frame 
m <- matrix(1:9, ncol=3, byrow=TRUE) 
df_m <- data.frame(m) 

#reverse 
df_m[rev(rownames(df_m)), ] 

# X1 X2 X3 
# 3 7 8 9 
# 2 4 5 6 
# 1 1 2 3 

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

  • कोई संबंधित समस्या नहीं^_^