2010-11-17 17 views
24

के साथ अलग करने के लिए डेटा.फ्रेम की सूची लिखें। सवाल यह सब कहता है - मैं डेटा.फ्रेम से भरा एक सूची वस्तु लेना चाहता हूं और प्रत्येक डेटा.फ्रेम को एक अलग .csv फ़ाइल में लिखना चाहता हूं जहां नाम का नाम .csv फ़ाइल सूची ऑब्जेक्ट के नाम से मेल खाती है।सीएसवी फाइलों को अलग-अलग

यहां एक पुन: उत्पन्न उदाहरण और कोड जो मैंने अभी तक लिखा है।

df <- data.frame(
    var1 = sample(1:10, 6, replace = TRUE) 
    , var2 = sample(LETTERS[1:2], 6, replace = TRUE) 
    , theday = c(1,1,2,2,3,3) 
) 

df.daily <- split(df, df$theday) #Split into separate days 

lapply(df.daily, function(x){write.table(x, file = paste(names(x), ".csv", sep = ""), row.names = FALSE, sep = ",")}) 

और यहाँ त्रुटि संदेश आर बाहर थूक

Error: Results must have one or more dimensions. 
In addition: Warning messages: 
1: In if (file == "") file <- stdout() else if (is.character(file)) { : 
    the condition has length > 1 and only the first element will be used 

मैं यहाँ क्या याद आ रही है के शीर्ष है?

+0

http://stackoverflow.com/q/3411429/271616 डुप्लिकेट –

+0

@ जोशुआ - दर, Google खोज विफल। मुझे अभी घर जाना चाहिए। इसे बंद करने के लिए स्वतंत्र महसूस करें। – Chase

+0

यह वास्तव में एक डुप्लिकेट नहीं है। आपकी त्रुटि यह बता रही है कि आप फ़ाइल नाम के रूप में लिखने योग्य करने के लिए एक से अधिक स्ट्रिंग पास कर रहे हैं। नाम (x) डेटा फ्रेम के सभी उपनामों को लौटाता है। –

उत्तर

16

इस प्रयास करें:

sapply(names(df.daily), 
function (x) write.table(df.daily[[x]], file=paste(x, "txt", sep=".")) ) 

आप नाम दिखाई देगा ("1", "2", "3") बाहर एक के बाद एक थूक, लेकिन NULLs सबूत हैं कि पक्ष डिस्क फ़ाइलों को लिखने का प्रभाव किया गया था। (संपादित करें: परिवर्तित कर दिया [] [[]] करने के लिए।)

+0

बेस आर समाधान के लिए धन्यवाद और 'पेस्ट' का उपयोग करने के लिए अधिक संक्षिप्त तरीका । – Chase

+0

मुझे लगता है कि 'df.daily [[x]] 'होना चाहिए। – Marek

+0

दोनों df.daily [x] और df.daily [[x]] मेरी मशीन पर एक ही परिणाम देते हैं। मुझे लगता है कि मैं आपके संदेह का तर्क देख सकता हूं, हालांकि। –

5

योग्य कुछ बातें:

laply प्रदर्शन एक सूची पर कार्रवाई। आप जो खोज रहे हैं वह d_ply है। और आपको इसे दिन में तोड़ना नहीं है, आप plyr को अपने लिए ऐसा कर सकते हैं। साथ ही, मैं नाम (x) का उपयोग नहीं करता क्योंकि यह डेटा.फ्रेम के सभी कॉलम नाम देता है।

d_ply(df, .(theday), function(x) write.csv(x, file=paste(x$theday,".csv",sep=""),row.names=F)) 
+0

मैं हमेशा किसी कारण से "_" प्लीयर कार्यों के बारे में भूल जाता हूं। यह चाल करेगा। धन्यवाद! – Chase

+0

यह समाधान मेरे लिए काम नहीं करता है। मुझे निम्न में एक त्रुटि संदेश मिलता है: फ़ाइल में त्रुटि (फ़ाइल, ifelse (संलग्न करें, "ए", "डब्ल्यू")): अमान्य 'विवरण' तर्क इसके अतिरिक्त: चेतावनी संदेश: यदि (फ़ाइल == "") फ़ाइल <- stdout() अन्यथा (is.character (फ़ाइल)) {: स्थिति की लंबाई लंबाई 1 है और केवल पहला तत्व उपयोग किया जाएगा – zach

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