Я читаю текстовый файл с this webpage в R. Если я читаю эти данные с read.table
данные разобран правильно и получить данные для всех 12 месяцев:Reading: read.table против read_table
url <- "http://academic.udayton.edu/kissock/http/Weather/gsod95-current/OHCINCIN.txt"
temp_df1 <- read.table(url,
col.names = c("Month", "Day", "Year", "Avg_Temp"),
na = "-99")
head(temp_df1)
Month Day Year Avg_Temp
1 1 1 1995 41.1
2 1 2 1995 22.2
3 1 3 1995 22.8
4 1 4 1995 14.9
5 1 5 1995 9.5
6 1 6 1995 23.8
unique(temp_df1$Month)
[1] 1 2 3 4 5 6 7 8 9 10 11 12
Однако, если я прочитаю эти данные с помощью read_table
, сначала появится, что он правильно разобран; однако коды с двойными цифрами (10, 11, 12) разделяются так, что анализируется только первая цифра.
temp_df2 <- read_table(url,
col_names = c("Month", "Day", "Year", "Avg_Temp"),
na = "-99")
head(temp_df2)
# A tibble: 6 × 4
Month Day Year Avg_Temp
<int> <int> <int> <dbl>
1 1 1 1995 41.1
2 1 2 1995 22.2
3 1 3 1995 22.8
4 1 4 1995 14.9
5 1 5 1995 9.5
6 1 6 1995 23.8
unique(temp_df2$Month)
[1] 1 2 3 4 5 6 7 8 9
Размеры данных одинаковы; однако я не могу понять, как импортировать данные с read_table
, чтобы сохранить полный код Month.
dim(temp_df1)
[1] 7963 4
dim(temp_df2)
[1] 7963 4
Я думаю, что это имеет отношение к 'read_table' неоспоримым _" похожи to read.table, но вместо синтаксического анализа, как файл, ограниченный произвольным количеством пробелов, он сначала находит пустые столбцы и затем анализирует, как файл фиксированной ширины. "_. (См. '? Read_table'). Например, если вы измените порядок строк (и, таким образом, разместите месяц с длиной 2), он будет работать так, как ожидалось. – lukeA
Действительно. Фактически это было [зарегистрировано как ошибка] (https://github.com/tidyverse/readr/issues/518) – yeedle
Данные на самом деле являются фиксированными; числа выравниваются влево, а не справа, что, вероятно, вызывает проблему. Вы можете прочитать его явно как фиксированную ширину: 'temp_df2 <- read_fwf (url, col_positions = fwf_empty (url, col_names = c (« Месяц »,« День »,« Год »,« Авг_Темп »), skip = 200) , na = "-99") ' – alistaire