Экспорт данных в CSV с различными типами данных на столбец - PullRequest
1 голос
/ 30 октября 2019

Мне нужно предоставить коллегам CSV, который они могут легко использовать в Excel. Различные части csv хранятся в разных data.tables, потому что они различаются по своей структуре. Теперь возникает проблема, что всякий раз, когда я хотел бы экспортировать data.tables в один CSV, тип данных столбцов с числовыми и строковыми значениями устанавливается на chr, и это, конечно, создает проблемы в Excel с числами. (Пожалуйста, имейте в виду, что проблема намного хуже, поскольку это Германия, и мы используем другой десятичный разделитель.) Я думаю, что это связано с тем, что большинство инструментов экспорта fwrite, write.csv, сначала rbinddata.tables в один и экспортировать его потом. Есть ли способ создать CSV, который может хранить разные data.types в одном столбце? В настоящее время я храню каждый файл data.table для каждого файла CSV, но, таким образом, я создаю ручную работу, которую я бы предпочел не делать.

Небольшой минимальный рабочий пример:

library(data.table)

dt.a <- data.table(D = letters[12:22]
                      , E = seq(from = 10, to = 11, by = 0.1)
                      )


dt.b <- data.table(A = seq(from = 1, to =2, by = 0.1)
                        , B = letters[1:11]
                        )

fwrite(x = rbind(dt.b
       , dt.a
       , use.names = FALSE)
       , file = "test.csv"
       , sep = ";"
       , dec = ","
       , col.names = FALSE 
       , row.names = FALSE
)

Это приводит кCSV-файл, как показано ниже, и, как видно, формат чисел не легко импортировать в Excel.

1;a
1.1;b
1.2;c
1.3;d
1.4;e
1.5;f
1.6;g
1.7;h
1.8;i
1.9;j
2;k
l;10
m;10.1
n;10.2

1 Ответ

0 голосов
/ 30 октября 2019

Ответ на этот вопрос - нет:

Есть ли способ создать CSV, который может хранить разные типы данных в одном столбце?

Столбцывекторы, состоящие ровно из одного типа / класса. Вы можете создавать столбцы списков, то есть столбцы, которые являются списками и, таким образом, могут содержать гетерогенные элементы, но я не думаю, что это хорошо перешло бы в таблицу Excel.

Ваши варианты:

  1. Создайте несколько CSV для каждого data.table,
  2. свяжите свои data.tables по столбцу, используя cbind(dt.a, dt.b) вместо строки
  3. , или просто экспортируйте несколько листов напрямую в XLSX, используя writexl библиотека. Это, вероятно, ваш лучший вариант. Попробуйте что-то вроде этого:
writexl::write_xlsx(list(dt_a = dt.a, dt_b = dt.b), "test.xlsx")

В результате получается XLSX с двумя листами, соответствующими вашим двум таблицам data.tables.

Я, вероятно, должен упомянуть, что разработчики writexl имеютвключил (плохо) функционирующий Clippy в документацию. Я лично думаю, что это довольно забавно, но многие люди очень раздражены .

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...