在R中将数据框输出为.csv文件

22

我想在 R 中基于数据框编写一个 .csv 文件,但是出现了以下错误:

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

这是traceback()的输出结果:

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")

有什么解决方案吗?


请确认您的“df”确实是一个数据框,而不是F密度函数(?df)。 - Hong Ooi
3个回答

31
你也可以直接在R中强制转换数据框:
my.df <- data.frame(lapply(old.df, as.character), stringsAsFactors=FALSE)

警告: 这将强制将整个数据框转换为指定的类型。例如,如果要将数据框强制转换为数字,则需要用 'as.numeric' 替换 'as.character':

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

1
谢谢!这正是我在寻找的。 - Ankit
@SummerEla,如果列表长度不同怎么办:它会给我一个“参数意味着行数不同:2, 3”错误。 - academic.user
1
对于数据框,R通常假定您放入数据框中的所有列都将具有相同的长度。如果需要整理数据,请尝试类似以下链接的方法: https://dev59.com/aWUo5IYBdhLWcg3wzSEq - SummerEla
4
我也尝试了这个方法,但有一个要注意的地方:as.character 会将所有内容都变成字符列,导致小数位数混乱。如果你正在处理数字数据框,可以尝试使用 my.df <- data.frame(lapply(old.df, as.numeric), stringsAsFactors=FALSE) - slammaster
谢谢,@slammaster;我更新了我的答案以包含你的观点。 - SummerEla

20

你的其中一列是列表类型,所以数据框不再是二维的,不能导出到二维csv文件。

如果你仍然想在结果输出中存储列表,你可以先将其转换为JSON格式。这样它就成为了一个"字符"类型的列,可以轻松地作为一列导出到csv文件中。


谢谢,问题已解决。在R中处理日期有点棘手。 - riders994

3

我遇到了同样的问题,但是不是使用as.character()或as.numeric(),而是使用as.matrix(),这样可以保持字符变量的字符形式,数值变量的数值形式,并且输出.csv文件非常顺利。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接