【发布时间】:2013-12-15 05:55:58
【问题描述】:
我已使用以下read.csv 命令读取仅包含 1,540 行数据的 csv 数据文件。出于某种原因,如果一行中的第一个字段为空,则整行将返回为 NA,如下所示。
data = read.csv(full_path, header = TRUE, sep = ",", strip.white = TRUE,
fill = TRUE, na.strings = c('NA','','NULL','#N/A'),
row.names = NULL, blank.lines.skip = TRUE)
该文件包含 5 个有用的字段,然后是我删除的 365 个字段。该文件的示例如下所示:
id,conm,No Data,Ticker,Cusip,,,,,,,,,,,
001010-01,ACF INDUSTRIES HOLDING CORP,TRUE,,00099V004^,,,,,,,,,,,
001040-01,AMF INC,TRUE,AMF,001688100^,,,,,,,,,,,
.
.
002444-01,BRUNSWICK CORP,TRUE,BC,117043109^,,,,,,,,,,,
,BURLINGTON INDUSTRIES INC,TRUE,121693972,121693972^,,,,,,,,,,,
002490-01,BURLINGTON NORTHERN INC.,TRUE,BNI,12189T104^,,,,,,,,,,,
因此,在上述 CSV 示例中,公司“BURLINGTON INDUSTRIES INC”的数据丢失,因为 id 为空。
id conm ticker cusip
2 001010-01 ACF INDUSTRIES HOLDING CORP <NA> 00099V004
3 001040-01 AMF INC AMF 001688100
4 001045-01 AMR CORP/DE AAMRQ 001765106
.
.
80 002444-01 BRUNSWICK CORP BC 117043109
NA <NA> <NA> <NA> <NA>
82 002490-01 BURLINGTON NORTHERN INC. BNI 12189T104
我没有发现这种行为记录在案,但这应该发生吗?还有其他字段为空,但不会发生此行为。我第一次尝试没有'row.names = NULL'和'blank.lines.skip = TRUE',效果是一样的。
如果我从文件中删除尾随的 365 字段,则读取将按预期工作。我检查了行尾的字段数,每个字段都包含相同的数字。
感谢您的帮助。
** 更新 **
我犯了一个错误,错误不在 read.csv 中,而是在下面的答案中概述的代码行中。
【问题讨论】:
-
当我复制您的示例数据并将其粘贴/保存到 Windows 中的文本文件时,
read.csv(...)有效(输入 5 行,所有 Burlington 数据都存在)。所以我倾向于认为问题与你的 csv 文件有关。你是如何产生它的?您能否提供该文件的链接,或者至少提供前 85 行左右的链接?我从 Google 文档下载的文件遇到了类似的问题。 -
@jlhoward 是的,你是对的,问题出在下一行代码上。我以为我在阅读后立即检查了状态,但我没有。我正在对 NA 值使用逻辑检查来删除一行。感谢您的帮助。