Подтвердить что ты не робот

Как я могу прочитать заголовок, но также пропустить строки - 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

Как это сделать?

4b9b3361

Ответ 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