【问题标题】:[R]: read.csv splits row[R]: read.csv 拆分行
【发布时间】:2020-05-25 19:08:27
【问题描述】:

我正在使用 read.csv2 将数据读入 R 数据帧。使用我的一个数据集,以某种方式将一些变量放入下一行,创建额外的行并切割列。举例说明: 我的 CSV 看起来像这样:

var1,var2,var3
value1,value2,value3
value1,value2,value3

然而,数据框是这样的:

var1    var2
value1  value2
value3
value1  value2
value3

我在很多 CSV 文件上使用了相同的命令,即使是在一个具有完全相同文件的不同样本的文件上,但从未遇到过这个问题。有没有人知道是什么原因造成的?

编辑:由于我仍然不确定如何上传实际数据集,因此我上传了它的外观截图。拆分发生在超过 3 列的每一行中。

【问题讨论】:

  • 你能提供一个可重现的示例数据集吗?还有你想要的输出?
  • 模式似乎不完整或错误。 var3 没有出现在数据框中。
  • 你的 csv 文件可能有问题,还有一些额外的 \n 或类似的东西
  • 我发现 excel 可以在 csv 文件行的末尾添加大量额外的 , (逗号),这可能会破坏其他试图读取数据的程序。我建议你用程序员文本编辑器检查你的 csv 文件。
  • @jyr,由于我仍然不确定如何在此处上传数据集,因此我附上了原始帖子中数据集的截图。拆分发生在超过 3 列的每一行中。

标签: r


【解决方案1】:

谢谢@jyr!这是完全有道理的,到目前为止它工作正常。 R 有什么方法可以检测到所需的实际列数?

【讨论】:

  • 您好,很高兴它有所帮助。您可以将问题标记为已回答,最好对答案发表评论而不是发布新答案 :) 我不确定如何自动检测它,但您可以创建比您需要的更多的列并删除仅包含 NA 的列dat[, apply(dat, 2, function(x) sum(is.na(x))) > 0]
【解决方案2】:

在您的数据中,文件中的列数不相等,因此您不能简单地使用read.csv,而必须将read.tablefill=TRUE 一起使用。用适当数量的列名填充col.name,它反映了您的数据结构。从您的屏幕截图中至少有 6 列。

read.table(dat, header = FALSE, sep = ",", 
      col.names = c("col_name1", "col_name2", "col_name3"), fill = TRUE)

有关更多信息,请参阅answer

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2012-07-04
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2022-09-29
    相关资源
    最近更新 更多