2014-06-27 20 views
6

मैं कुछ डेटा के माध्यम से लूपिंग कर रहा हूं, और इसे सीएसवी फ़ाइल में जोड़ रहा हूं। मैं चाहता हूं कि फ़ाइल के शीर्ष पर कॉलम नाम एक बार हो, और फिर यह फ़ाइल के बीच में कॉलम नाम दोहराने के लिए loops।कॉलम नामों का उपयोग करते समय कॉलम नामों का उपयोग करते समय लिखने योग्य

यदि मैं col.names=T करता हूं, तो यह प्रत्येक नए पाश के लिए कॉलम नामों को दोहराता है। अगर मेरे पास col.names=F है, तो कोई कॉलम नाम नहीं है।

मैं इसे सबसे कुशलतापूर्वक कैसे कर सकता हूं? मुझे लगता है कि यह एक आम मामला है कि कोड को लिखने के बिना विशेष रूप से इसे संभालने के लिए ऐसा करने का एक तरीका होना चाहिए।

write.table(dd, "data.csv", append=TRUE, col.names=T) 
+0

अनचाहे, लेकिन आप 'col.names = ifelse (ii%% 1, TRUE, FALSE) कर सकते हैं, जहां ii आपका लूप पुनरावृत्ति – rawr

+3

है, मुझे नहीं लगता कि यह वास्तव में ऐसा लगता है जैसा आप सोचते हैं। आम तौर पर आप पहले पूरा डेटा बनाते हैं। पहले इसे लिखें और फिर इसे एक बार लिखें। – MrFlick

उत्तर

3

आप कर सकते हैं या भी पंक्ति नाम एक जैसे होने के साथ कोई समस्या देखते नहीं हो सकता है, के रूप में write.table जब जोड़कर समान पंक्ति नामों की अनुमति नहीं है। आप इसे आज़मा सकते हैं। फ़ाइल में पहले लिखने में, write.table को केवल row.names = FALSE के साथ आज़माएं। फिर, दूसरे लिखने से शुरू दायर करने के लिए, दोनों col.names = FALSE और row.names = FALSE

यहाँ दाखिल करने के लिए

> d1 <- data.frame(A = 1:5, B = 1:5)    ## example data 
> write.table(d1, "file.txt", row.names = FALSE) 

पहले लिखने का उपयोग हम read.table("file.txt", header = TRUE) के साथ देख सकते हैं। फिर हम

> write.table(d1, "file.txt", row.names = FALSE, 
       col.names = FALSE, append = TRUE) 

साथ कि फाइल करने के लिए एक ही डेटा फ्रेम जोड़ सकते हैं और फिर हम read.table("file.txt", header = TRUE)

तो साथ यह जांच कर सकते हैं, यदि आप डेटा फ्रेम की एक सूची है, dlst कहते हैं, अपने कोड हिस्सा है कि संलग्न कर देता है डेटा फ्रेम एक साथ

> dlst <- rep(list(d1), 3)        ## list of example data 
> write.table(dlst[1], "file.txt", row.names = FALSE) 
> invisible(lapply(dlst[-1], write.table, "file.txt", row.names = FALSE, 
        col.names = FALSE, append = TRUE)) 

की तरह कुछ लग सकता है लेकिन जैसे-जैसे @MrFlick पता चलता है, यह बहुत अच्छा होगा आर में डेटा फ्रेम संलग्न है, और फिर एक बार फाइल करने के लिए उन्हें भेजने के लिए। यह फ़ाइल में लिखते समय हो सकता है कि कई संभावित त्रुटियों/समस्याओं को खत्म कर देगा। डेटा एक सूची में है, तो उस के साथ

> dc <- do.call(rbind, dlst) 
> write.table(dc, "file.txt") 
+0

आपकी टिप्पणी के लिए धन्यवाद। जब मैंने आपको सुझाव दिया कि मुझे निम्न त्रुटि मिलती है: write.table (dd, "data.csv", raw.names = FALSE) में त्रुटि: अप्रयुक्त तर्क (raw.names = FALSE) – user1754606

+0

मुझे कोई समस्या नहीं थी प्रारंभ में पंक्ति नाम के साथ। – user1754606

+0

@ user1754606, आपको वह त्रुटि मिलती है क्योंकि आपने "पंक्ति" को "कच्चे" के रूप में गलत लिखा है –

10

देखें ?file.exists किया जा सकता है।

write.table(dd, "data.csv", append=TRUE, col.names=!file.exists("data.csv")) 

इस प्रकार कॉलम नाम केवल तभी लिखे जाते हैं जब आप पहले से मौजूद फ़ाइल में शामिल नहीं होते हैं।

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

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