Проблемы с импортом txt-файла в R с помощью readr вместо read.table

Я пытаюсь импортировать следующий текстовый файл:

   "year"   "sex"   "name"       "n"    "prop"
"1" 1880    "F"     "Mary"      7065    0.0723835869064085
"2" 1880    "F"     "Anna"      2604    0.0266789611187951
"3" 1880    "F"     "Emma"      2003    0.0205214896777829
"4" 1880    "F"     "Elizabeth" 1939    0.0198657855642641
"5" 1880    "F"     "Minnie"    1746    0.0178884278469341
"6" 1880    "F"     "Margaret"  1578    0.0161672045489473
"7" 1880    "F"     "Ida"       1472    0.0150811946109318
"8" 1880    "F"     "Alice"     1414    0.0144869627580554
"9" 1880    "F"     "Bertha"    1320    0.0135238973413247
"10"1880    "F"     "Sarah"     1288    0.0131960452845653

и у меня нет проблем с использованием:

data <-read.table("~/Documents/baby_names.txt",header=TRUE,se="\t")

Однако я не понял, как это сделать с помощью readr. Следующая команда не работает:

data2 <-read_tsv("~/Documents/baby_names.txt")

Я знаю, что проблема связана с тем, что первая строка содержит пять элементов (заголовки), а остальные 6, но я не знаю, как сказать readr игнорировать «1», «2», «3» и т. Д. на. Какие-либо предложения?


person Ruben Garcia    schedule 14.06.2016    source источник
comment
Если бы я работал с этим файлом, я бы просто добавил "id" в список имен столбцов. Тогда read.table() с header=TRUE будут работать как положено.   -  person Tim Biegeleisen    schedule 14.06.2016


Ответы (2)


Мы можем прочитать в два этапа (не проверено):

# read the columns, convert to character vector
myNames <- read_tsv(file = "myFile.tsv", n_max = 1)[1, ]

# read the data, skip 1st row, then drop the 1st column
myData <- read_tsv(file = "myFile.tsv", skip = 1, col_names = FALSE)[, -1]

# assign column names
colnames(myData) <- myNames
person zx8754    schedule 14.06.2016

Вы можете прочитать текст и названия столбцов по отдельности, а затем объединить их:

require(readr)

df <- read_tsv("baby_names.txt", col_names = F, skip = 1)

col_names <- read.table("baby_names.txt", header = F, sep = "\t", nrows = 1)

df$X1 <- NULL
names(df) <- col_names

Результат:

> head(df)
     1     1         1    1          1
1 1880 FALSE      Mary 7065 0.07238359
2 1880 FALSE      Anna 2604 0.02667896
3 1880 FALSE      Emma 2003 0.02052149
4 1880 FALSE Elizabeth 1939 0.01986579
5 1880 FALSE    Minnie 1746 0.01788843
6 1880 FALSE  Margaret 1578 0.01616720

Я не думаю, что есть простой способ установки row_names в read_tsv(), как в read.table(), но этого должно быть достаточно обходного пути.

person niczky12    schedule 14.06.2016