我把下面的data.table(data.frame)叫做输出:
> head(output)
Id Title IsProhibited
1 10000074 Renault Logan, 2005 0
2 10000124 Ñêëàäñêîå ïîìåùåíèå, 345 ì<U+00B2> 0
3 10000175 Ñó-øåô 0
4 10000196 3-ê êâàðòèðà, 64 ì<U+00B2>, 3/5 ýò. 0
5 10000387 Samsung galaxy S4 mini GT-I9190 (÷¸ðíûé) 0
6 10000395 Êàðòèíà ""Êðûì. Ïîñåëîê Àðîìàò"" (õîëñò, ìàñëî) 0
我尝试将其导出为CSV,如下所示:
> write.table(output, 'output.csv', sep = ',', row.names = FALSE, append = T)
但是,在执行此操作时,我得到以下错误:
Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, :
unimplemented type 'list' in 'EncodeElement'
In addition: Warning message:
In write.table(output, "output.csv", sep = ",", row.names = FALSE, :
appending column names to file
我尝试过将Title
转换为字符串,这样它就不再是list
类型,如下所示:
toString(output$Title)
但是,我得到了同样的错误。我的类型是:
> class(output)
[1] "data.frame"
> class(output$Id)
[1] "integer"
> class(output$Title)
[1] "list"
> class(output$IsProhibited)
[1] "factor"
有人能告诉我如何将data.frame导出为CSV吗?
我注意到的另一件奇怪的事情是,如果我写head(output)
,我的文本编码不正确(如上所示),而如果我简单地写output$Title[0:3]
,它会正确地显示文本,如下所示:
> output$Title[0:3]
[[1]]
[1] "Renault Logan, 2005"
[[2]]
[1] "Складское помещение, 345 м²"
[[3]]
[1] "Су-шеф"
有什么想法吗?和我最初的问题有关吗?
**编辑:**以下是我的新输出:
Id Title IsProhibited
10000074 Renault Logan, 2005 0
10000124 СкладÑкое помещение, 345 м<U+00B2> 0
10000175 Су-шеф 0
10000196 3-к квартира, 64 м<U+00B2>, 3/5 ÑÑ‚. 0
10000387 Samsung galaxy S4 mini GT-I9190 (чёрный) 0
10000395 Картина \\"Крым. ПоÑелок Ðромат\"\" (холÑÑ‚ маÑло)" 0
10000594 КальÑн 25 Ñм 0
10000612 1-к квартира, 45 м<U+00B2>, 6/17 ÑÑ‚. 0
10000816 Гараж, 18 м<U+00B2> 0
10000831 Платье 0
10000930 Карбюраторы К-22И, К-22Г от газ 21 и газ 51 0
请注意行ID 10000395是如何混乱的?它似乎包含自己的引号,这是混乱的CSV。我该如何修复?
7条答案
按热度按时间hwamh0ep1#
无论您有多少列,请执行以下操作:
然后做
write.csv
。zkure5ic2#
正如在评论中提到的,你应该能够做一些类似这样的事情(未经测试)来把你的
list
“扁平化”成一个字符向量:如前所述,如果您想尝试
unlist
方法,可以通过output$Title
中的单个值“扩展”每行,如下所示:llmtgqce3#
data.table包中有一个新函数(2016年11月引入),它可以很好地处理将data.table对象写入csv的问题,即使在data.table的列是列表的情况下也是如此。
e37o9pze4#
另一个简单的解决方案。可能一个或多个列是
list
类型,所以我们需要将它们转换为“字符”或数据框。因此有两个简单的解决方案1.使用--将每列“转换为.character”
df$col1 = as.character(df$col1)
df$col2 = as.character(df$col2)
.......等等
1.最好的一个把
df
转换成一个“矩阵”df = as.matrix(df)
现在将
df
写入csv。对我有效。yizd12fk5#
这些都是优雅的解决方案。
对于那些更喜欢R代码而不是现成的包的好奇的读者来说,这里有一个R函数,它返回一个非列表 Dataframe ,可以导出并保存为. csv。
输出是所讨论的“麻烦” Dataframe 。
在 Dataframe “输出”上应用函数:
接下来,您可以通过apply()确认新的(newDF) Dataframe 没有“列出”。这应该会成功返回FALSE。
继续将新 Dataframe newDF作为.csv文件保存到您选择的路径。
xytpbqjk6#
假设
Path
,即path=Path
df
是要保存的 Dataframe ,请执行以下步骤:
1.将
df
另存为 txt 文档:1.将文本文件读入R:
1.现在保存为 csv:
就这样了
vddsk6oq7#