2013-08-04 7 views
5

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

df.list1[[1]][4,] 

या इस तरह पंक्तियों की एक श्रृंखला:

df.list1[[1]][1:10,] 

मेरे सवाल यह है: मैं कैसे करूँ सूची में प्रत्येक डेटा फ्रेम के लिए एक विशेष पंक्ति मुद्रित करें? दूसरे शब्दों में:

df.list1[[i]][4,] 

df.list1 उस में 30 डेटा फ्रेम है, लेकिन मेरे दूसरे df.lists है कि मैं उनकी पंक्तियों को निकालने के लिए देख रहा हूँ 140 से अधिक डेटा फ्रेम है। मैं एक विशेष सूची में कई डेटा फ्रेम में विशेष स्थानों को स्टोर करने में सक्षम होना चाहता हूं। मुझे लगता है कि समाधान में lapply शामिल हो सकता है।

इसके अलावा, क्या किसी शर्त के आधार पर सूची में प्रत्येक डेटा फ्रेम में पंक्तियों को निकालने का कोई तरीका है? उदाहरण के लिए, सूची df.list1 में सभी 30 डेटा फ्रेम के लिए, पंक्ति को निकालें यदि मान "अपार्टमेंट" या वर्णों की कुछ अन्य स्ट्रिंग के बराबर है।

आपकी मदद की सराहना करें, कृपया मुझे बताएं कि क्या मैं अपनी समस्या को स्पष्ट करने में मदद कर सकता हूं।

उत्तर

12

विस्तार करने के लिए आप यह भी कर सकते थे बस

# example data of a list containing 10 data frames: 
test <- replicate(10,data.frame(a=1:10),simplify=FALSE) 

# extract the fourth row of each one - setting drop=FALSE means you get a 
# data frame returned even if only one vector/column needs to be returned. 
lapply(test,"[",4,,drop=FALSE) 

प्रारूप है::

सीधे निकासी समारोह @Justin पता चलता है, जैसे

इस सामान्यीकरण करने के लिए जब आप एक स्थिति के आधार पर एक निष्कर्षण पूरा कर रहे हैं, आप इसे नीचे दिए गए उदाहरण सभी पंक्तियों जहां प्रत्येक data.frame में a>4 है निकालने की तरह कुछ करने के लिए एक छोटे से ऊपर परिवर्तन होगा। इस मामले में, anonymous function का उपयोग शायद सबसे स्पष्ट तरीका है, उदा।:

lapply(test, function(x) with(x,x[a>4,,drop=FALSE])) 

#[[1]] 
# a 
#5 5 
#6 6 
#7 7 
#8 8 
#9 9 
#10 10 
# etc... 
+0

बहुत उपयोगी! मैं इस विधि का उपयोग कुछ दिनों से कर रहा हूं, लेकिन क्या आप मुझे एक शर्त के आधार पर एक पंक्ति निकालने का एक उदाहरण दिखा सकते हैं? यह गलत है, लेकिन आपको अभी भी विचार मिल सकता है: लापरवाही (परीक्षण, "[", अगर (पंक्ति = "अपार्टमेंट"), ड्रॉप = गलत) – geoQuant

+0

@geoQuant - मैंने इसे शामिल करने के लिए अपना उत्तर संपादित किया है - उम्मीद है कि इससे मदद मिलती है । – thelatemail

+0

'लापली (परीक्षण, सबसेट, ए> 4) 'एक विकल्प के रूप में – baptiste

4

मेरे सुझाव है कि क्या आप एक ही डेटा फ्रेम पर चाहते हैं एक समारोह लिखने के लिए: return(dat[4, ]) insteaad:

myfun <- function(dat) { 
    return(dat[4, , drop=FALSE]) 
} 

तुम सिर्फ कर data.frame के बजाय एक वेक्टर के रूप में वापस जाने के लिए चाहते हैं,। तब lapply का उपयोग अपनी सूची के प्रत्येक तत्व है कि समारोह लागू करने के लिए:

lapply(df.list1, myfun) 
कि तकनीक के साथ

, आप आसानी से तरीके के साथ आ सकते हैं myfun के लिए और अधिक जटिल कार्य ...

+0

कूल दृष्टिकोण। धन्यवाद, लेकिन मुझे लगता है कि मेराफन चलाने के लिए प्रतीत नहीं होता है। – geoQuant

+0

@geoQuant, यह एक छोटी निगरानी थी। यह अभी ठीक होना चाहिए। – Arun

5

एक आवरण समारोह के लिए कोई जरूरत नहीं है, बस अंत में lapply और पास यह एक खाली तर्क का उपयोग

lapply(df.list, `[`, 4,) 

(कॉलम प्रतिनिधित्व करने के लिए) यह भी साथ काम करता है पंक्ति तर्क के किसी भी प्रकार है कि आप सामान्य रूप से myDF[ . , ] जैसे में प्रयोग करेंगे: lapply(df.list, [, c(2, 4:6),)


मेरा सुझाव है कि आप एक आवरण समारोह का उपयोग करने जा रहे हैं, इसे और अधिक [ की तरह काम करता है: उदाहरण के लिए

Grab(df.list, 2:3, 1:5) हर data.frame की 5 वीं स्तंभ के माध्यम से दूसरे & तीसरी पंक्ति और पहले का चयन करेंगे और Grab (df.list, 2:3) सभी स्तंभों

Grab <- function(ll, rows, cols) { 
    if (missing(cols)) 
     lapply(ll, `[`, rows,) 
    else 
     lapply(ll, `[`, rows, cols) 
} 

Grab (df.list, 2:3) 
0

उदाहरण के लिए, आप एक .csv hw1_data.csv बुलाया फ़ाइल है की दूसरी & तीसरी पंक्ति का चयन करेंगे और आप 47 वीं पंक्ति प्राप्त करना चाहते हैं।

x<-read.csv("hw1_data.csv") 

x[47,] 

यदि यह एक पाठ फ़ाइल आप read.table का उपयोग कर सकते है: यहाँ है कि कैसे करना है।

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