2011-07-06 9 views
17

私は日々のデータを1980年からcsvファイルにしています。しかし、私は1985年からのみデータを読みたいと思っています。別のファイルの他のデータセットは1985年から始まるので、1985年以前のデータをR言語で読み飛ばすことはできますか?特定の行からcsvを読んでください

答えて

26

すべてのオプションについては、?read.csvをご覧ください。

データのサンプルを見ることなく正確な答えを出すのは少し難しいです。あなたのデータは、ヘッダを持っていないと、あなたは1985年のデータは上の始まる行かを知るならば、あなただけのようなものを使用することができます

...

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

は...最初の1825行をスキップします。

データに年変数がある場合は、データをインポートした後にデータをサブセット化することもできます。

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

1985のデータが始まる場所がわからない場合、あなたは、ファイルの日付変数に1985年の最初のインスタンスを見つけるためにはgrepを使用して、唯一以降その行から続けることができます。

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

ここにいくつかの選択肢があります。 (あなたはその後"Date"クラスに最初の列に変換し、おそらく動物園のオブジェクトまたは他の時系列クラスのオブジェクトに全体の事を変換したいことがあります。)

# 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") 

# 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を+サブセットを

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") 

あなたのデータがSにない場合例として、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

はどのように日に複数の引数を渡すのでしょうか?つまり、Date = "2007-01-01"または "2007-01-02"のすべての行を戻したい場合です。 – Zach

+1

'サブセット(DF2、日付==" 2007-01-01 "|日付==" 2007-01-02 ")' –

+0

残念ですが、read.csv.sql関数の一部として意味する – Zach