write_csv Научная запись в зависимости от конечного "000" - PullRequest
0 голосов
/ 16 мая 2018

Запись csv с помощью функции write_csv () из пакета readr, по-видимому, обрабатывает числа по-разному в зависимости от конечных нулей.

  • 4001705344 сохраняется как есть, но
  • 4100738000 сохраняетсякак 4100738e3 в CSV.

Это вызывает проблемы при повторном открытии CSV (например, в Excel).

Для воспроизводимого примера s.

    library(readr)
    x <- c(4100750938, 4104806156, 4001682199, 4100738000)
    df <- data.frame(x) 
    write_csv(df, "df.csv") 

Результат -

    x
    4100750938
    4104806156
    4001682199
    4100738e3

Ожидаемый результат -

    x
    4100750938
    4104806156
    4001682199
    4100738000

Единственное, что помогает, - это сохранить х как символьный вектор, который сохраняет число в 000 и дает ожидаемый результат.

    library(readr)
    x <- c(4100750938, 4104806156, 4001682199, 4100738000)
    x <- as.character(x)
    df <- data.frame(x) 
    write_csv(df, "df.csv") 

Но есть ли другой путь?И работает ли write_csv () здесь правильно?

Я использую readr_1.1.1 на R версии 3.3.3 (2017-03-06) Платформа: x86_64-w64-mingw32 / x64 (64-разрядная версия)

Просмотр других вопросов, которые я нашел write_csv read_csv с научной нотацией после 1000-й строки , но, похоже, это другой вопрос для меня.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Один из подходов - использовать обычную функцию write.csv () и установить опции ():

x <- c(4100750938, 4104806156, 4001682199, 4100738000)
df <- data.frame(x) 

options(digits=15) 
write.csv(df, "myfile.csv", row.names = FALSE)

system("cat myfile.csv")
# "x"
# 4100750938
# 4104806156
# 4001682199
# 4100738000
0 голосов
/ 16 мая 2018

Попробуйте код ниже

write_csv(df, "df.csv",fileEncoding = "UTF-16LE")
...