मैं यहाँ R में फिक्स्ड-चौड़ाई फ़ाइलों को पढ़ने के लिए विकल्पों की सूची प्रस्तुत करता हूं , साथ ही कुछ बेंचमार्क प्रदान करता हूं जिसके लिए सबसे तेज़ है।
मेरे पसंदीदा दृष्टिकोण के fread
साथ गठबंधन करना है stringi
; यह सबसे तेज़ दृष्टिकोण के रूप में प्रतिस्पर्धी है, और इसमें आपके डेटा को संग्रहीत करने का अतिरिक्त लाभ (IMO) है data.table
:
library(data.table)
library(stringi)
col_ends <-
list(beg = c(1, 10, 15, 19, 23, 28, 32, 36,
41, 45, 49, 54, 58),
end = c(9, 14, 18, 22, 27, 31, 35,
40, 44, 48, 53, 57, 61))
data = fread(
"http://www.cpc.ncep.noaa.gov/data/indices/wksst8110.for",
header = FALSE, skip = 4L, sep = NULL
)[, lapply(1:(length(col_ends$beg)),
function(ii)
stri_sub(V1, col_ends$beg[ii], col_ends$end[ii]))
][ , paste0("V", c(2, 5, 8, 11)) := NULL]
ध्यान दें कि fread
व्हाट्सएप को स्वचालित रूप से लीडिंग और ट्रेलिंग स्ट्रिप्स - कभी-कभी, यह अवांछनीय है, जिस स्थिति में सेट किया गया है strip.white = FALSE
।
हम कॉलम चौड़ाई के वेक्टर के साथ शुरुआत भी ww
कर सकते थे:
ww <- c(9, 5, 4, 4, 5, 4, 4, 5, 4, 4, 5, 4, 4)
nd <- cumsum(ww)
col_ends <-
list(beg = c(1, nd[-length(nd)]+1L),
end = nd)
और हम नकारात्मक सूचकांकों का उपयोग करके अधिक मजबूत तरीके से बाहर करने के लिए कौन से कॉलम उठा सकते हैं:
col_ends <-
list(beg = c(1, -10, 15, 19, -23, 28, 32, -36,
41, 45, -49, 54, 58),
end = c(9, 14, 18, 22, 27, 31, 35,
40, 44, 48, 53, 57, 61))
फिर के col_ends$beg[ii]
साथ abs(col_ends$beg[ii])
और अगली पंक्ति में बदलें :
paste0("V", which(col_ends$beg < 0))
अंत में, यदि आप चाहते हैं कि कॉलम के नाम प्रोग्राम के अनुसार भी पढ़े जा सकें, तो आप साफ कर सकते हैं readLines
:
cols <-
gsub("\\s", "",
sapply(1:(length(col_ends$beg)),
function(ii)
stri_sub(readLines(URL, n = 4L)[4L],
col_ends$beg[ii]+1L,
col_ends$end[ii]+1L)))
cols <- cols[cols != ""]
(ध्यान दें कि fread
हेडर पंक्ति को हटाने के लिए इस चरण के संयोजन को तालिका की एक प्रति बनाने की आवश्यकता होगी, और इस प्रकार बड़े डेटा सेट के लिए अक्षम होगा)
read.fwf
निश्चित चौड़ाई वाले स्वरूपित डेटा को पढ़ने के लिए एक नज़र डालें ।