2012-02-10 9 views
5

मैं एक बड़ी प्रश्नावली पर काम कर रहा हूं - और मैं विभिन्न प्रश्नों (जैसे डीएफ 1 और डीएफ 2) के लिए सारांश आवृत्ति सारणी का उत्पादन करता हूं।.csv फ़ाइलों के रूप में निर्यात करने से पहले दो डेटाफ्रेम में शामिल हों

write.csv(df1 ,file="df2.csv") 

हालांकि, के रूप में मेरे प्रश्नावली कई सवाल और इसलिए dataframes है, मैं सोच रहा था अगर वहाँ आर में करने के लिए एक तरीका है:

a<-c(1:5) 
b<-c(4,3,2,1,1) 
Percent<-c(40,30,20,10,10) 
df1<-data.frame(a,b,Percent) 
c<-c(1,1,5,2,1) 
Percent<-c(10,10,50,20,10) 
df2<-data.frame(a,c,Percent) 
rm(a,b,c,Percent) 

मैं सामान्य रूप से निम्न आदेश का उपयोग कर csv फ़ाइलें के रूप में dataframes निर्यात विभिन्न डेटाफ्रेम गठबंधन करें (उन्हें अलग करने वाली रेखा के साथ कहें), और इन्हें एक सीएसवी (और फिर अंत में एक्सेल में खोलें) में निर्यात करें? जब मैं एक्सेल खोलता हूं, तो मेरे पास मेरे सभी प्रश्न डेटाफ्रेम के साथ केवल एक फ़ाइल होगी, एक दूसरे के नीचे। यह एक सीएसवी फ़ाइल अलग-अलग फाइलों की तुलना में बहुत आसान होगी जो मुझे परिणाम देखने के लिए खोलने के लिए खोलना है।

अग्रिम में बहुत धन्यवाद।

+0

मैं उन्हें – James

+0

पर विलय कर रहा हूं यदि आप फ़ाइल कनेक्शन खोलते हैं, तो आप इसे दोनों कार्यों में उपलब्ध एपेंड पैरामीटर का उपयोग करके write.csv और बिल्ली के साथ लिख सकते हैं। –

उत्तर

4

यदि आपका अंतिम लक्ष्य एक्सेल स्प्रेडशीट है, तो मैं सीधे एक एक्सएलएस फ़ाइल लिखने के लिए आर में उपलब्ध कुछ टूल्स देखता हूं। निजी तौर पर, मैं XLConnect पैकेज का उपयोग करता हूं, लेकिन xlsx और कई पैकेजों में चारों ओर तैरने वाले कई write.xls फ़ंक्शंस भी हैं।

मैं XLConnect पसंद करने के लिए होता है, क्योंकि यह सिर्फ इस तरह की परिस्थितियों में कुछ उपयोगी vectorization के लिए अनुमति देता है:

require(XLConnect) 

#Put your data frames in a single list 
# I added two more copies for illustration 
dfs <- list(df1,df2,df1,df2) 

#Create the xls file and a sheet 
# Note that XLConnect doesn't seem to do tilde expansion! 
wb <- loadWorkbook("/Users/jorane/Desktop/so.xls",create = TRUE) 
createSheet(wb,"Survey") 

#Starting row for each data frame 
# Note the +1 to get a gap between each 
n <- length(dfs) 
rows <- cumsum(c(1,sapply(dfs[1:(n-1)],nrow) + 1)) 

#Write the file 
writeWorksheet(wb,dfs,"Survey",startRow = rows,startCol = 1,header = FALSE) 
#If you don't call saveWorkbook, nothing will happen 
saveWorkbook(wb) 

मैं के बाद से अन्यथा यह प्रत्येक डेटा फ्रेम के लिए स्तंभ शीर्ष लेख लिखेंगे header = FALSE निर्दिष्ट। लेकिन अंत में xls फ़ाइल में शीर्ष पर एक पंक्ति जोड़ना बहुत अधिक काम नहीं है।

+0

यह अद्भुत @ जोरन है - क्या एक अच्छा पैकेज है! बस कुछ त्वरित अतिरिक्त प्रश्न ... सबसे पहले, तालिका के ऊपर डेटाफ्रेम का नाम होना संभव है (जो साक्षात्कार प्रश्न के लिए व्यक्तिगत डेटाफ्रेम से मेल खाता जीवन को बहुत आसान बना देगा)। मेरे डेटाफ्रेम के नाम प्रत्येक प्रश्न - यानी आयु, लिंग इत्यादि का संदर्भ लेंगे, इसलिए यह बहुत उपयोगी होगा। इसके अलावा, दृश्य उद्देश्यों के लिए, क्या डेटाफ्रेम के चारों ओर एक सीमा रखना संभव है? –

+0

@ KatieT हां, संभव में सीमाओं को जोड़ना। '? CreateCellStyle','? SetBorder' देखें। यह प्रोग्रामेटिक रूप से ऐसा करने के लिए बहुत सुविधाजनक नहीं होगा, हालांकि, आपको प्रत्येक परिधि कक्ष पर व्यक्तिगत सीमाओं को सही सीमा निर्दिष्ट करना होगा। डीएफ नाम जोड़ने का सबसे आसान तरीका एक अलग कॉलम के साथ होगा, जैसे 'सी ('आयु', एनए, एनए, ...)'। – joran

+0

एक्सेल कार्यों में निर्यात किए जाने पर डेटा.फ्रेम के बीच अलगाव के तरीके को समझा सकता है। यह इस उदाहरण में ठीक काम करता है लेकिन एक ही कोड को और अधिक विविध डेटा के साथ कोशिश करते समय। फ्रेम से डेटा.फ्रेम ओवरलैप हो सकता है। मैंने 'पंक्तियों <- cumsum (c (1, sapply (dfs, nrow) [- 1] + 1) के भीतर संख्याओं को बदलने का प्रयास किया है)' लेकिन डेटा.फ्रेम के बीच एक सतत स्थान सुनिश्चित करने का एक विश्वसनीय तरीका नहीं मिला है। –

1

के रूप में जेम्स ने टिप्पणी की, आप

merge(df1, df2, by="a") 

इस्तेमाल कर सकते हैं लेकिन यह है कि डेटा क्षैतिज गठबंधन होगा। आप उन्हें गठबंधन करने के लिए चाहते हैं, तो खड़ी आप rbind इस्तेमाल कर सकते हैं:

rbind(df1, df2, df3,...) 

(नोट: स्तंभ नाम rbind के लिए मैच के लिए काम करने की जरूरत)।

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