Data.txt:
Index;Time;
1;2345;
2;1423;
3;5123;
Le code:
dat <- read.table('data.txt', skip = 1, nrows = 2, header =TRUE, sep =';')
Le résultat:
X1 X2345
1 2 1423
2 3 5123
Je m'attends à ce que l'en-tête soit Index et Time, comme suit:
Index Time
1 2 1423
2 3 5123
Comment je fais ça?
Je crains qu'il n'y ait aucun moyen direct d'y parvenir. Soit vous lisez l'intégralité du tableau et supprimez ensuite les lignes que vous ne souhaitez pas, soit vous lisez deux fois dans le tableau et attribuez l'en-tête ultérieurement:
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)
Vous utilisez incorrectement le saut. Essaye ça:
dat <- read.table('data.txt', nrows = 2, header =TRUE, sep =';')[-1, ]
Au lieu de read.table()
, utilisez une fonction readr
telle que read_csv()
, dirigée vers dplyr::slice()
.
library(readr)
library(dplyr)
dat <- read_csv("data.txt") %>% slice(-1)
C'est très rapide aussi.
La solution utilisant fread
de data.table
.
require(data.table)
fread("Data.txt", drop = "V3")[-1]
Résultat:
> fread("Data.txt", drop = "V3")[-1]
Index Time
1: 2 1423
2: 3 5123
Vous pouvez (dans la plupart des cas), sub
la fin ;
écrire un nouveau fichier sans la deuxième ligne (qui est vraiment la première ligne à cause de l'en-tête), et utiliser read.csv
au lieu de 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