2015-10-02 4 views
9

मेरे पास आकार ~ 1 जीबी की एक CSV फ़ाइल है, और जैसा कि मेरा लैपटॉप मूल विन्यास का है, मैं एक्सेल या आर में फ़ाइल खोलने में सक्षम नहीं हूं लेकिन जिज्ञासा से, मैं संख्या प्राप्त करना चाहता हूं फ़ाइल में पंक्तियां। मैं इसे कैसे कर सकता हूं, अगर मैं इसे कर सकता हूं। अग्रिम में धन्यवाद।क्या सीएसवी फ़ाइल में इसे खोलने के बिना पंक्तियों की संख्या प्राप्त करना संभव है?

+4

हो सकता है कि सिर्फ 'WC -l yourfile.csv' एक कमांड लाइन शीघ्र, या कुछ से ? – joran

+2

यदि फ़ाइल का आकार 1 जीबी है तो आप इसे आयात करने में सक्षम होना चाहिए। बेशक, आपको इसे 'read.table' और दोस्तों के साथ नहीं करना चाहिए। पैकेज डेटा.table से 'fread' का प्रयोग करें। – Roland

+0

तो आप कह रहे हैं कि 'nrow (read.csv ("file.csv", header = t/f))' क्रैश आर? और हाँ, 'fread' निश्चित रूप से –

उत्तर

20

लिनक्स/यूनिक्स के लिए:

wc -l filename 

विंडोज के लिए:

find /c /v "A String that is extremely unlikely to occur" filename 
12

अपनी क्षमता के बारे में सुनिश्चित नहीं हैं, लेकिन यहां एक आधार आर तरीका है। फ़ाइल कनेक्शन के माध्यम से, count.fields() फ़ाइल की प्रति पंक्ति फ़ील्ड की संख्या की गणना करता है। इसलिए यदि हम परिणाम की लंबाई लेते हैं, तो सैद्धांतिक रूप से हमें फ़ाइल में पंक्तियों (पंक्तियों) की संख्या समाप्त करनी चाहिए।

length(count.fields(filename)) 

और यदि आप एक शीर्ष लेख पंक्ति है, तो आप यह skip = 1

length(count.fields(filename, skip = 1)) 

साथ छोड़ सकते हैं अन्य तर्कों है कि आप अपने विशिष्ट जरूरतों के लिए समायोजित कर सकते हैं कर रहे हैं।

args(count.fields) 
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE, 
#  comment.char = "#") 
# NULL 

अधिक के लिए help(count.fields) देखें।

अद्यतन: यह गति जितनी दूर तक खराब नहीं है। मैंने बस अपनी बेसबॉल फाइलों में से एक पर परीक्षण किया जिसमें 99846 पंक्तियां हैं।

nrow(data.table::fread("Batting.csv")) 
# [1] 99846 

system.time({ l <- length(count.fields("Batting.csv", skip = 1)) }) 
# user system elapsed 
# 0.528 0.000 0.503 

l 
# [1] 99846 
file.info("Batting.csv")$size 
# [1] 6153740 

एक और विचार data.table::fread() उपयोग करने के लिए पहले कॉलम को पढ़ने के लिए केवल, तो पंक्तियों की संख्या से लेते हैं। यह बहुत तेज़ होगा।

system.time(nrow(fread("Batting.csv", select = 1L))) 
# user system elapsed 
# 0.063 0.000 0.063 
1

यहाँ कुछ मैं प्रयोग किया जाता है: के लिए इस पोस्ट

testcon <- file("xyzfile.csv",open="r") 
readsizeof <- 20000 
nooflines <- 0 
(while((linesread <- length(readLines(testcon,readsizeof))) > 0) 
nooflines <- nooflines+linesread) 
close(testcon) 
nooflines 

चेक बाहर अधिक: https://www.r-bloggers.com/easy-way-of-determining-number-of-linesrecords-in-a-given-large-file-using-r/

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

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