Как я могу прочитать заголовок, но также пропустить строки - 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
Как это сделать?
Ответы
Ответ 1
Боюсь, что прямого пути для этого нет. Либо вы читаете всю таблицу и впоследствии удаляете ненужные строки, либо дважды читаете в таблице и позже назначаете заголовок:
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)
Ответ 2
Вы используете пропустить неправильно. Попробуйте следующее:
dat <- read.table('data.txt', nrows = 2, header =TRUE, sep =';')[-1, ]
Ответ 3
Решение с использованием fread
от data.table
.
require(data.table)
fread("Data.txt", drop = "V3")[-1]
Результат:
> fread("Data.txt", drop = "V3")[-1]
Index Time
1: 2 1423
2: 3 5123
Ответ 4
Вместо read.table()
используйте функцию readr
, такую как read_csv()
, с номером dplyr::slice()
.
library(readr)
library(dplyr)
dat <- read_csv("data.txt") %>% slice(-1)
Это очень быстро.
Ответ 5
Вы можете (в большинстве случаев), sub
выйти из финального ;
записать новый файл без второй строки (это действительно первая строка из-за заголовка) и использовать 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