Экспорт CSV без имен столбцов

43

Мне нужно взять data.frame и экспортировать его в файл CSV (или что-то еще, но CSV выглядит как самый простой, хорошо сформированный формат), поэтому я могу импортировать его в базу данных SQLite.

Однако, похоже, что write.csv() требует, чтобы я написал строку заголовка, а команда SQLite .import требует, чтобы я не имел строку заголовка. Так что немного несоответствия.

Вот что произойдет, если я попытаюсь опустить строку заголовка:

> write.csv(mydf, "/tmp/mydf.csv", row.names=F, col.names=F)
Warning message:
In write.csv(mydf, "/tmp/mydf.csv", row.names = F, col.names = F) :
  attempt to set 'col.names' ignored

Мне нужно задаться вопросом, почему это в первую очередь - в руководстве сказано: "Эти обертки преднамеренно негибкие: они предназначены для обеспечения правильности использования условных условных обозначений для действительного файла. Попытка изменить append, col.names, sep, dec или qmethod игнорируются с предупреждением." Но я ничего не знаю в спецификации или в других местах, где требуются имена столбцов. Действительно, большинство инструментов (Excel и т.д.) Не относятся к ним специально.

Теги:
csv

3 ответа

83
Лучший ответ

Если вы не можете победить, присоединитесь к ним.

Если вы переключитесь на write.table() (какие write.csv() вызовы в любом случае), вы будете золотыми:

R> write.table(trees, file="/tmp/trees.csv", 
+              row.names=FALSE, col.names=FALSE, sep=",")
R> system("head /tmp/trees.csv")
8.3,70,10.3
8.6,65,10.3
8.8,63,10.2
10.5,72,16.4
10.7,81,18.8
10.8,83,19.7
11,66,15.6
11,75,18.2
11.1,80,22.6
11.2,75,19.9
R>
  • 3
    Благодарю. Это заставляет меня задуматься, действительно ли write.csv() имеет дело со всеми особенностями формата CSV, но, возможно, я подумаю об этом в другой день.
  • 1
    @KenWilliams Я удивился тому же, когда увидел такой дизайн API. Сначала перехватывать пользователей, а затем отправлять им предупреждения - не очень дружественный способ обеспечить соблюдение определенного соглашения.
10

Вы можете напрямую импортировать его в SQLite. Следующий импорт встроенного фрейма данных BOD в базу данных SQLite my.db (создание my.db, если оно еще не существует).

library(RSQLite)
con <- dbConnect(SQLite(), dbname = "my.db")
dbWriteTable(con, "BOD", BOD, row.names = FALSE)
dbDisconnect(con)
5

Используйте write.table() вместо этого так:

write.table(mydf, "/tmp/mydf.csv", row.names=F, col.names=F, sep=",")

Ещё вопросы

Сообщество Overcoder
Наверх
Меню