riders994
riders994

Reputation: 1306

Outputting a Dataframe in R to a .csv

So I'm trying to write a .csv file based on a data frame in R, but for some reason I keep getting the following error:

Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol,  : 
  unimplemented type 'list' in 'EncodeElement

This is what traceback() is giving:

5: write.table(df, file = "df.csv", col.names = NA, 
       sep = ",", dec = ".", qmethod = "double")
4: eval(expr, envir, enclos)
3: eval(expr, p)
2: eval.parent(Call)
1: write.csv(df, file = "df.csv")

Any solution?

Upvotes: 22

Views: 24029

Answers (3)

Andy Bogart
Andy Bogart

Reputation: 31

I just had the same issue and instead of using as.character() or as.numeric(), I used as.matrix(), and it kept my character variables character, and my numeric variables numeric, and output the .csv file like a dream.

Upvotes: 3

SummerEla
SummerEla

Reputation: 1952

You can also coerce data frames directly in R:

my.df <- data.frame(lapply(old.df, as.character), stringsAsFactors=FALSE)

CAVEAT: this will coerce your entire dataframe to whatever type you specify. For example, if you want to coerce your dataframe to number, you would replace 'as.characater' with 'as.numeric':

 my.df <- data.frame(lapply(old.df, as.numeric), stringsAsFactors=FALSE)

Upvotes: 31

Marcel Hebing
Marcel Hebing

Reputation: 3182

One of your columns is of type list, so the data.frame is no longer 2-dimensional and can't be exported to a 2d csv-file.

If you still want to store the list in the resulting output, you might transform it to JSON first. So it becomes an column of type "character" which can be easily exported as one column to csv.

Upvotes: 20

Related Questions