web-dev-qa-db-ja.com

read.csv、1行目のヘッダー、2行目をスキップ

2行のヘッダー行を持つCSVファイルがあります。1行目はヘッダーにしたいのですが、2行目は破棄したいです。次のコマンドを実行した場合:

_data <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE)
_

最初の行はヘッダーになり、ファイルの2行目はデータフレームの最初の行になります。

_  Xaaaaaaaaa       X X.1     Xbbbbbbbbbb     X.2 X.3
1         Date PX_LAST  NA         Date PX_LAST  NA
2   31/12/2002  38.855  NA   31/12/2002  19.547  NA
3   02/01/2003  38.664  NA   02/01/2003  19.547  NA
4   03/01/2003  40.386  NA   03/01/2003  19.547  NA
5   06/01/2003  40.386  NA   06/01/2003  19.609  NA
6   07/01/2003  40.195  NA   07/01/2003  19.609  NA
_

CSVファイルのこの2行目をスキップして、

_  X1.HK.Equity       X X.1 X2.HK.Equity     X.2 X.3
2   31/12/2002  38.855  NA   31/12/2002  19.547  NA
3   02/01/2003  38.664  NA   02/01/2003  19.547  NA
4   03/01/2003  40.386  NA   03/01/2003  19.547  NA
5   06/01/2003  40.386  NA   06/01/2003  19.609  NA
6   07/01/2003  40.195  NA   07/01/2003  19.609  NA
_

私はdata <- read.csv("HK Stocks bbg.csv", header = T, stringsAsFactors = FALSE, skip = 1)を試しましたが、それは返します:

_        Date PX_LAST  X     Date.1 PX_LAST.1 X.1
1 31/12/2002  38.855 NA 31/12/2002    19.547  NA
2 02/01/2003  38.664 NA 02/01/2003    19.547  NA
3 03/01/2003  40.386 NA 03/01/2003    19.547  NA
4 06/01/2003  40.386 NA 06/01/2003    19.609  NA
5 07/01/2003  40.195 NA 07/01/2003    19.609  NA
6 08/01/2003  40.386 NA 08/01/2003    19.547  NA
_

ヘッダー行は、CSVファイルの1行目ではなく2行目から取得されます。

ありがとうございました。

28
mchangun

これはトリックを行う必要があります:

all_content = readLines("file.csv")
skip_second = all_content[-2]
dat = read.csv(textConnection(skip_second), header = TRUE, stringsAsFactors = FALSE)

readLinesを使用した最初のステップでは、ファイル全体をリストに読み込みます。リスト内の各項目はファイル内の行を表します。次に、Rの負のインデックス付けがselect all but this indexを意味するという事実を使用して、2行目を破棄します。最後に、このデータをread.csvにフィードして、data.frameに処理します。

48
Paul Hiemstra

ヘッダーの後の最初の行をデータフレームから直接削除して、これを1行で行うことができます。

df<-read.csv("test.txt",header=T)[-1,]

データファイル「test.txt」が次の場合:

var1, var2
units1, units2
2.3,6.8
4.5,6.7

これは私に与えます

> read.csv("test.txt",header=T)[-1,]
var1 var2
2  2.3  6.8
3  4.5  6.7

これはあなたの質問に正確に答えますが、答えを一般化するために、[〜#〜] n [〜#〜]thをスキップすることもできます[〜#〜] m [〜#〜]th行は次のようになります。

df<-read.csv("test.txt",header=T)[-N:-M,]

nとMはもちろん整数です。


注:このメソッドは、すべての列を因子に変換します。

str(read.csv("test.csv", header = TRUE)[-1,])
# 'data.frame': 2 obs. of  2 variables:
#   $ var1: Factor w/ 3 levels "2.3","4.5","units1": 1 2
#   $ var2: Factor w/ 3 levels " units2","6.7",..: 3 2
2
Adrian Tompkins

Linux(またはMac)では、data.table::freadでLinuxコマンドを使用できるという利点を活用できます。

data.table::fread("sed -e '2d' myfile.txt", data.table = F)

2行目をスキップします。

1
daknowles