[R]: read.csv如何拆分行

3

我正在使用read.csv2将数据读入R数据框。在我的一个数据集中,一些变量被放置在下一行,导致出现额外的行并截断了列。举个例子:我的CSV看起来像这样:

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

然而,数据框看起来像这样:

var1    var2
value1  value2
value3
value1  value2
value3

我在许多CSV文件上使用相同的命令,甚至在具有完全相同文件的不同样本上也使用了该命令,但从未遇到此问题。 是否有人知道是什么原因导致了这个问题?
编辑:由于我仍然不确定如何上传实际数据集,因此我上传了一个屏幕截图以展示它的外观。 在每个具有3列以上的行中都会发生分割。 enter image description here

你能提供一个可复制的示例数据集吗?还有你期望的输出是什么? - TobKel
你的 CSV 文件可能存在问题,可能有额外的 \n 或其他类似的东西。 - jyr
我发现 Excel 可以在 CSV 文件行末添加大量额外的逗号,这可能会破坏其他试图读取数据的程序。我建议您使用程序员文本编辑器检查您的 CSV 文件。 - Nigel Davies
在行末加逗号会导致不同的结果,并出现“列数超出预期”的错误。尝试定位分割发生的行,并在此处发布或手动查找。此外,您可以尝试在Excel、Libreoffice中打开文件,看是否存在类似的问题。 - jyr
1
@jyr,因为我仍然不确定如何在这里上传数据集,所以我已经在原始帖子中附上了数据集外观的截图。分割发生在每个包含3列以上的行中。 - weissAa
显示剩余8条评论
2个回答

1
在您的数据中,文件中的列数不相等,因此您不能简单地使用read.csv,而必须使用read.table并使用fill=TRUE。使用适当数量的列名填充col.name以反映您的数据结构。从您的截图中可以看出至少有6列。
read.table(dat, header = FALSE, sep = ",", 
      col.names = c("col_name1", "col_name2", "col_name3"), fill = TRUE)

欲了解更多信息,请查看此答案


0

谢谢@jyr!这很有道理,到目前为止它运行良好。R 有办法检测需要的实际列数吗?


你好,很高兴能帮到你。你可以将问题标记为已回答,最好在评论中发表意见而不是发布新的答案 :) 我不确定如何自动检测它,但你可以创建比所需更多的列,并使用类似于 dat[, apply(dat, 2, function(x) sum(is.na(x))) > 0] 的方法删除仅包含 NA 的列。 - jyr

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