read_csv () добавляет "\ r" к вводу * .csv - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь прочитать небольшой (17 КБ) простой CSV-файл с EdX.org (для онлайн-курса), и у меня никогда не было этой проблемы с readr::read_csv() раньше. Base-R read.csv() читает файл без генерации проблемы.

Небольшой (17 КБ) CSV-файл из EdX.org

library(tidyverse)
df <- read_csv("https://courses.edx.org/assets/courseware/v1/ccdc87b80d92a9c24de2f04daec5bb58/asset-v1:MITx+15.071x+1T2020+type@asset+block/WHO.csv")
head(df)

Дает этот вывод

#> # A tibble: 6 x 13
#>   Country Region Population Under15 Over60 FertilityRate LifeExpectancy
#>   <chr>   <chr>       <dbl>   <dbl>  <dbl> <chr>                  <dbl>
#> 1 Afghan… Easte…      29825    47.4   3.82 "\r5.4\r"                 60
#> 2 Albania Europe       3162    21.3  14.9  "\r1.75\r"                74
#> 3 Algeria Africa      38482    27.4   7.17 "\r2.83\r"                73
#> 4 Andorra Europe         78    15.2  22.9  <NA>                      82
#> 5 Angola  Africa      20821    47.6   3.84 "\r6.1\r"                 51
#> 6 Antigu… Ameri…         89    26.0  12.4  "\r2.12\r"                75
#> # … with 6 more variables: ChildMortality <dbl>, CellularSubscribers <dbl>,
#> #   LiteracyRate <chr>, GNI <chr>, PrimarySchoolEnrollmentMale <chr>,
#> #   PrimarySchoolEnrollmentFemale <chr>

Вы заметите, что к столбцу FertilityRate добавлено "\ r" к значениям. Я скачал файл csv и не могу найти их там.

Base-R read.csv() читает в файле без проблем, поэтому мне интересно, в чем проблема с моим использованием tidyverse read_csv().

head(df$FertilityRate)
#> [1] "\r5.4\r"  "\r1.75\r" "\r2.83\r" NA         "\r6.1\r"  "\r2.12\r"

Как я могу исправить использование read_csv() так, чтобы: строк "\ r" не было?

Если возможно, я бы предпочел не иметь индивидуально указать тип каждого столбца.

1 Ответ

3 голосов
/ 26 марта 2020

В двух словах, символы находятся внутри файла (вероятно, случайно), и read_csv имеет право не удалять их автоматически: поскольку они встречаются в кавычках , это соглашение означает, что синтаксический анализатор CSV должен обрабатывать поле как есть, а не удалять пробельные символы. read.csv неправильно делать это, и это, возможно, ошибка.

Вы можете удалить их самостоятельно после загрузки данных:

df = mutate_if(df, is.character, ~ stringr::str_remove_all(.x, '\r'))

Это кажется хорошим достаточно для этого файла, но в целом я бы опасался, что файл может быть поврежден другими способами, так как наличие этих символов явно не является преднамеренным, и файл не следует общему соглашению об окончании файла (это не обычный Windows nor Unix file).

...