2011-07-06 17 views
17

से सीएसवी पढ़ें मेरे पास 1 9 80 से सीएसवी फ़ाइल में दैनिक डेटा है। लेकिन मैं केवल 1 9 85 से डेटा पढ़ना चाहता हूं। क्योंकि दूसरी फाइल में अन्य डेटासेट 1 9 85 से शुरू होता है। मैं आरएन भाषा में 1 9 85 से पहले डेटा को कैसे पढ़ सकता हूं?विशिष्ट पंक्ति

उत्तर

26

मुझे लगता है कि आप सभी विकल्पों को देखने के लिए ?read.csv पर एक नज़र डालना चाहते हैं।

अपने डेटा का नमूना देखे बिना सटीक उत्तर देने में थोड़ा मुश्किल है।

अपने डेटा एक हैडर नहीं है, तो और आप जो लाइन 1985 के आंकड़ों पर शुरू होता है पता है, तो आप सिर्फ तरह कुछ का उपयोग कर सकते हैं ...

impordata <- read.csv(file,skip=1825) 

... पहले 1825 लाइनों को छोड़।

अन्यथा यदि आप अपने डेटा में एक साल परिवर्तनीय हैं तो आप इसे आयात करने के बाद हमेशा डेटा को सब्सक्राइब कर सकते हैं।

impordata <- read.csv("skiplines.csv") 
impordata <- subset(impordata,year>=1985) 

यदि आप जहां 1985 डेटा शुरू होता है पता नहीं है, आप ग्रेप उपयोग कर सकते हैं अपनी फ़ाइल की तारीख चर 1985 का पहला उदाहरण खोजने के लिए और उसके बाद ही उस पंक्ति के बाद से रखें:

impordata <- read.csv("skiplines.csv") 
impordata <- impordata[min(grep(1985,impordata$date)):nrow(impordata),] 
17

यहां कुछ विकल्प हैं। (आप बाद में "Date" वर्ग के लिए प्रथम स्तंभ बदलने और संभवतः एक चिड़ियाघर वस्तु या अन्य समय श्रृंखला वर्ग वस्तु के लिए पूरे बात कन्वर्ट करने के लिए कर सकते हैं।)

# create test data 
fn <- tempfile() 
dd <- seq(as.Date("1980-01-01"), as.Date("1989-12-31"), by = "day") 
DF <- data.frame(Date = dd, Value = seq_along(dd)) 
write.table(DF, file = fn, row.names = FALSE) 

read.table + सबसेट

# if file is small enough to fit in memory try this: 

DF2 <- read.table(fn, header = TRUE, as.is = TRUE) 
DF2 <- subset(DF2, Date >= "1985-01-01") 

read.zoo

# or this which produces a zoo object and also automatically converts the 
# Date column to Date class. Note that all columns other than the Date column 
# should be numeric for it to be representable as a zoo object. 
library(zoo) 
z <- read.zoo(fn, header = TRUE) 
zw <- window(z, start = "1985-01-01") 

अपने डेटा रों में नहीं है उदाहरण के रूप में एएम प्रारूप आपको read.zoo पर अतिरिक्त तर्कों का उपयोग करने की आवश्यकता होगी।

कई read.table के

# if the data is very large read 1st row (DF.row1) and 1st column (DF.Date) 
# and use those to set col.names= and skip= 

DF.row1 <- read.table(fn, header = TRUE, nrow = 1) 
nc <- ncol(DF.row1) 
DF.Date <- read.table(fn, header = TRUE, as.is = TRUE, 
    colClasses = c(NA, rep("NULL", nc - 1))) 
n1985 <- which.max(DF.Date$Date >= "1985-01-01") 

DF3 <- read.table(fn, col.names = names(DF.row1), skip = n1985, as.is = TRUE) 

sqldf

# this is probably the easiest if data set is large. 

library(sqldf) 
DF4 <- read.csv.sql(fn, sql = 'select * from file where Date >= "1985-01-01"') 
+0

कैसे आप दिनांक के लिए कई तर्क पारित होगा? यानी, यदि आप उन सभी पंक्तियों को वापस करना चाहते हैं जहां दिनांक = "2007-01-01" या "2007-01-02"। – Zach

+1

'सबसेट (DF2, दिनांक ==" 2007/01/01 "| दिनांक ==" 2007-01-02 ")' –

+0

माफ करना, मैं read.csv.sql समारोह के हिस्से के रूप मतलब – Zach

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