【问题标题】:Converting a list to csv file using R使用 R 将列表转换为 csv 文件
【发布时间】:2017-11-30 06:16:29
【问题描述】:

我在表单中有一个列表

0 -121.904167 41.974556
1 -121.902153 41.974766
2 -121.896790 41.988075
....

我需要将其转换为格式为 csv 的文件(使用 R)

0; -121.904167; 41.974556
1; -121.902153; 41.974766
2; -121.896790; 41.988075

我导入列表

doc1 <- readLines("https://www.cs.utah.edu/~lifeifei/research/tpq/cal.cnode")

然后我用分号替换空格

doc1 <- gsub("\\s+",";", doc1)

然后我将doc1 导出到 .csv 文件中

cat(doc1, file = "doc1.csv")

但我导出的文件看起来有点乱。首先,所有的行都是一个接一个,而不是一个在另一个之下。 此外,我的第一行的最后一个元素被认为是附加到第二行的第一个元素等

如果我将这个 .csv 文件导入 Excel,让您知道我的意思(这不是我的最终目标,只是为了澄清) 我将所有文件写入一行,其中列是

0 | -121.904167 | 41.974556 1 | -121.902153 | 41.974766 2 | -121.896790 .....

虽然我在 sublime 中打开的 csv 文件看起来像这样

0;-121.904167;41.974556 1;-121.902153;41.974766 2;-121.896790;41.988075 3;-121.889603;41.998032 4;-121.886681;42.008739 5;-121.915062;41.970314 6;-121.910088;41.973942 7;-121.916199;41.969482 

知道如何使用 R 正确实现它吗?

【问题讨论】:

  • 为什么不使用?write.table 系列函数?
  • @docendodiscimus 的问题不在于写入 csv 文件,而不是解析它并在保持行序的同时添加分号。
  • 在我看来,您应该使用read.table 系列函数读取数据,这样您就可以得到data.frame,然后就不需要解析或手动插入分号,因为这就是@ 987654332@函数家族为你做。
  • 您在读取数据时遇到问题。仔细查看第一个 doc1。

标签: r csv parsing


【解决方案1】:
library(data.table)
input<-fread(input = "https://www.cs.utah.edu/~lifeifei/research/tpq/cal.cnode")

检查是否导入正常。

 >dim(input)
 [1] 21048     3

最后导出为带有逗号分隔符的csv(默认):

 write.csv(input,"output.csv",row.names = F)

【讨论】:

  • 为什么需要fread?您可以简单地使用 base R write.csv2(read.table("https://www.cs.utah.edu/~lifeifei/research/tpq/cal.cnode"), file = "myfile.csv")
  • 我更喜欢它。更快更可靠。底座也可以,我想这是一个品味问题
  • 在这两种情况下col.names = F 都不起作用,它会创建 csv 文件并在第一行添加"V1";"V2";"V3"。我收到以下错误:警告消息:在 write.csv(input, file = "output.csv", row.names = F, col.names = F) 中:尝试设置 'col.names' 被忽略
  • @TomZinger 在write.csvwrite.csv2 中都没有诸如col.names 之类的参数。在控制台中尝试 ?write.csv 如果您需要添加列名,请尝试 names(input)before 保存为 .csv
  • @TomZinger 第 52706 行仅包含字符串 pillar,没有数字数据。所以你需要先对其进行 QA(当然是通过下载)