Как экспортировать / прочитать пустой фрейм данных в R? - PullRequest
0 голосов
/ 05 июня 2018

Я пытаюсь экспортировать / импортировать кадры данных в виде csv-файлов, используя read.csv и write.csv, но я не могу справиться со случаем, когда data.frame пуст.Обычно, если мой data.frame пуст (т. Е. В нем есть столбец, но нет имен строк), write.csv создает пустой файл * .csv, и я получаю сообщение об ошибке при попытке прочитать его с помощью read.csv.Любое решение?

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

Я получаю сообщение об ошибке:

Я получаю следующее сообщение об ошибке:

Error in read.table(file = file, header = header, sep = sep, quote = 
quote,  : 
les premières cinq lignes sont vides : abandon

Что переводится в:первые 5 строк пусты: сдача.

Мои строки кода:

write.csv(DF.old,file="DF_old.csv",row.names=FALSE)
DF.old<-read.csv(file="DF_old.csv")

Тип данных в кадре данных:

enter image description here

, и он может опустеть, когда я использую следующие команды:

DF.old <- DF.old[DF.old$exceptionnel==T]
DF.old<-DF.old  %>% 
      filter(!id_op %in% to_add$id_op)

Наконец, это в приложении Shiny.

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Это прекрасно работает как минимум с data.table.

> library(data.table)
> 
> #generate a data table with column name and no rows
> DT <- data.table(column1="value")[column1!="value"]
> 
> #print the data table
> DT
Empty data.table (0 rows) of 1 col: column1
> 
> #write the data table
> fwrite(DT, "test.csv")
> 
> #read the data table
> fread("test.csv")
Empty data.table (0 rows) of 1 col: column1

Таким образом, при записи с fwrite и чтении с fread ошибок нет, а имена столбцов сохраняются.

0 голосов
/ 07 августа 2019

При работе с пустым фреймом данных 0 столбца и 0 строки, fwrite из data.table завершается неудачноОднако write_csv из readr удается создать пустой CSV-файл.

library(readr) # or library(tidyverse)
df <- data.frame()
write_csv(df, "~/empty_df.csv")
# fwrite does not work
0 голосов
/ 05 июня 2018
dat <- data.frame(A=character(),B=numeric())
write.csv(dat, 'test.csv', row.names=FALSE)
dat2 <- read.csv('test.csv')
head(dat)
head(dat2)

# For Vincent
require(dplyr)
DF <- data.frame(a=c('A','B','C','A','A','B'),b=rnorm(6))  
DF.old <- DF %>% filter (a %in% 'D')
write.csv(DF.old,file="DF_old.csv",row.names=FALSE)
DF.old2<-read.csv(file="DF_old.csv")

Я пробую это, но не получаю ошибок и предупреждений.Пожалуйста, проверьте ваш скрипт и опубликуйте сообщение об ошибке.

...