web-dev-qa-db-ja.com

ヘッダーを読むだけでなく、行をスキップするにはどうすればよいですか-read.table()?

Data.txt:

Index;Time;
1;2345;
2;1423;
3;5123;

コード:

dat <- read.table('data.txt', skip = 1, nrows = 2, header =TRUE, sep =';')

結果:

  X1 X2345
1  2  1423
2  3  5123

次のように、ヘッダーはインデックスと時間であると予想されます。

  Index Time
1   2   1423
2   3   5123

それ、どうやったら出来るの?

26
hans-t

私は、これを達成する直接的な方法がないことを恐れています。テーブル全体を読み取って、不要な行を後で削除するか、テーブルを2回読み取って後でヘッダーを割り当てます。

header <- read.table('data.txt', nrows = 1, header = FALSE, sep =';', stringsAsFactors = FALSE)
dat    <- read.table('data.txt', skip = 2, header = FALSE, sep =';')
colnames( dat ) <- unlist(header)
36
Beasterfield

スキップを誤って使用しています。これを試して:

dat <- read.table('data.txt', nrows = 2, header =TRUE, sep =';')[-1, ]
4
Andrew Cassidy

read.table()の代わりに、read_csv()にパイプされたdplyr::slice()などのreadr関数を使用します。

library(readr)
library(dplyr)
dat <- read_csv("data.txt") %>% slice(-1)

それも非常に高速です。

2
Joe

data.tableからfreadを使用するソリューション。

require(data.table)
fread("Data.txt", drop = "V3")[-1]

結果:

> fread("Data.txt", drop = "V3")[-1]
   Index Time
1:     2 1423
2:     3 5123
2
djhurio

(ほとんどの場合)subで終わる; 2番目の行(実際にはヘッダーのために最初の行)なしで新しいファイルを書き込み、read.csv の代わりに read.table

> txt <- "Index;Time;
  1;2345;
  2;1423;
  3;5123;" 
> writeLines(sub(";$", "", readLines(textConnection(txt))[-2]), 'newTxt.txt')
> read.csv('newTxt.txt', sep = ";")
##   Index Time
## 1     2 1423
## 2     3 5123
0
Rich Scriven