Столбец ошибочно помечен как int, когда num - PullRequest
0 голосов
/ 26 сентября 2018

Я сгенерировал фрейм данных, который содержит 9829 наблюдений 37 переменных, и сохранил его с помощью write_csv.

При загрузке этого фрейма данных с использованием read_csv один столбец помечается как int, если его значения являются плавающими числами, это вызываетвсе плавающие значения в этом столбце должны быть установлены на NA.

После тщательного изучения выясняется, что проблема в том, что первые ~ 4000 наблюдений в этом столбце равны 0 без цифр, что, по-видимому, является проблемой с чтениемfunction.

Быстрое решение проблемы - сортировка информационного кадра в порядке убывания по столбцу, который вызывает проблему перед сохранением.Но это недопустимое решение, так как в будущем у меня может быть несколько столбцов с этой проблемой.

Вопрос: Есть ли способ установить write_csv для записи всех элементов в плавающие столбцыс точностью до 2 цифр?Или исправить проблему автоматически

Спасибо

РЕДАКТИРОВАТЬ

library(tidyverse)

col1 <- c(c(0:5000), c(2.1,3.5))
df <- data.frame(col1)

write_csv(df, "./data_out/test/wrong_dataType_issue.csv")
df_read <- read_csv("./data_out/test/wrong_dataType_issue.csv")
summary(df_read)

 col1     
 Min.   :   0  
 1st Qu.:1250  
 Median :2500  
 Mean   :2500  
 3rd Qu.:3749  
 Max.   :4999  
 NA's   :7     

1 Ответ

0 голосов
/ 26 сентября 2018

По умолчанию read_csv() просматривает первые 1000 строк данных.Я предлагаю эту главу из R для Data Science для фона.Для функции возможно угадать неправильно.Например, у меня когда-то был набор данных, в котором столбец gender был помечен как логический, потому что все первые 1000 строк были женскими, а функция интерпретировала «F» как «ЛОЖЬ».Есть правильный способ решить эту проблему и быстрый способ.

Быстрый способ

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

read_csv("my_data.csv", guess_max = 9829)

Это заставляет функцию read_csv() просматривать каждое значение в вашем наборе данных, прежде чем угадывать типы столбцов.Это решит вашу проблему, но в будущем может вызвать больше проблем, особенно если встроить в приложение Shiny, где базовые данные могут измениться.

Правильный путь

read_csv() позволяет легко определить типы данных всех ваших столбцов.Если вы хотите убедиться, что столбец age всегда читается как числовой, используйте что-то вроде следующего ...

read_csv("my_data.csv", col_types = cols(age = col_double())
...