write_csv Научная запись в зависимости от конечного "000"?

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

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

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

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

    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

Единственное, что помогает, - это сохранить x как символьный вектор, который сохраняет целое число 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 ответа

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

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

Одним из подходов является использование обычной функции 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
Другие вопросы по тегам