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
それ、どうやったら出来るの?
私は、これを達成する直接的な方法がないことを恐れています。テーブル全体を読み取って、不要な行を後で削除するか、テーブルを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)
スキップを誤って使用しています。これを試して:
dat <- read.table('data.txt', nrows = 2, header =TRUE, sep =';')[-1, ]
read.table()
の代わりに、read_csv()
にパイプされたdplyr::slice()
などのreadr
関数を使用します。
library(readr)
library(dplyr)
dat <- read_csv("data.txt") %>% slice(-1)
それも非常に高速です。
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
(ほとんどの場合)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