R-从 PurpleAir 传感器读取 csv 文件并跳过某些行末尾包含非标准字符的错误位置

Posted

技术标签:

【中文标题】R-从 PurpleAir 传感器读取 csv 文件并跳过某些行末尾包含非标准字符的错误位置【英文标题】:R-Read in csv files from PurpleAir sensors and skip error location where non standard characters are contained at the end of some rows 【发布时间】:2020-11-25 06:02:38 【问题描述】:

我有许多 PurpleAir 传感器,它们每天将一个 .csv 文件保存到 SD 卡中,并将日期用作文件名。我正在尝试从这些每日 .csv 文件中提取和组合数据。

由于某种原因,某些行的最后一个单元格中的数据后跟 3 个非标准字符,并在 .csv 文件中以这种方式出现:0.46 Screenshot of characters because they are not showing up as text

read.csv("filepath") - 正确读取标题行和所有行,直到这些非标准字符第一次出现,然后不加载剩余数据。如果错误出现在前几行,则函数会给出以下错误:

Warning message:
In read.table(file = file, header = header, sep = sep, quote = quote,  :
  incomplete final line found by readTableHeader on '20200825.csv'

手动打开文件并删除这些额外字符允许 R 正确读取到出现这些字符的下一行(这些字符出现在看似随机的行中,但总是在行尾/在最后一个单元格中)。

我不需要最后一列的数据,所以有没有办法告诉函数忽略最后一列而只读取第一列?

我已经尝试了多个线程的一些建议,但目前无法解决问题。手动打开文件并删除字符不是一个选项,因为我有很多文件。

(注意,尝试使用 readLines 作为文本读入并修复字符只会导致函数在遇到与 read.csv 相同的这些字符时结束)

非常感谢任何支持!

【问题讨论】:

有一个colClasses参数。 我尝试使用 colClasses 忽略设置为“NULL”的最后一列。但是,由于这些字符似乎会影响行尾,因此该函数仍会在该行的末尾停止。所以跳过列可能不是解决方案。 【参考方案1】:

在读取您的 csv 文件之前,请尝试使用此命令 Sys.setlocale("LC_ALL", "C")。我有一个类似的文件,它通过更改语言环境来工作。如果它不起作用,您可以尝试更改为其他语言环境。

【讨论】:

感谢您的建议。我尝试了上面的命令,但不幸的是没有成功。

以上是关于R-从 PurpleAir 传感器读取 csv 文件并跳过某些行末尾包含非标准字符的错误位置的主要内容,如果未能解决你的问题,请参考以下文章

试图读取存储在csv文件中的R中的推文

R foreach:并行读取和操作多个文件

r R从URL #R读取csv

在 while 循环中绘制或 time.sleep 或 csv 保存数据会导致感测数据和从力传感器读取数据之间存在滞后

R语言 CSV文件

有没有办法使用 read.csv 从字符串值而不是 R 中的文件读取?