如何检查是否从 .txt 文件中正确提取了数据(超过 150 万行)

How to check that data (1.5m+ rows) were extracted correctly from a .txt file

从.txt文件中提取了8个变量,下图为原始数据示例:

"lat", "lon", "elev", "var"(第三行的长串), "year", "mth", "day" 和 "data"(值):

已创建包含超过 150 万行的 .Rdata 文件。下图为结果截图:

如您所见,这些行似乎是从 .txt 文件中正确提取的,我已经手动检查了前 1,000 行,但我无法对文件的其余部分执行此操作。

我的问题是:如何有效地检查是否正确提取了 1.5 m 行?

table 应该有什么属性? "year" 应该只在一定范围内吗?索引应该一直增加吗?每个经度测量值是否应该始终有固定数量的测量值? 进行一些完整性检查就足够了;如果这些行在一段时间内看起来正确,并且它们通过了健全性检查,那么您可能有足够的把握去做

示例:

unique(df[,'year'])

或者,您可以将 table 写入与读取它时相同的格式,然后比较 MD5(google 以获得 MD5 帮助)

在@hedgedandlevered 的回答和@vagabond 的评论的基础上,您可以做很多事情,可能是系统地,在分析之前检查您的数据框。我环顾了 Stack Overflow,但找不到关于检查数据帧的问题,所以这是我加载文件时使用的程序的价值。

我使用 dplyr 并将我的数据框转换为 dbf_tbl 以便输出合理。使用内置数据集 iris:

install.packages("dplyr")
require("dplyr")
iris <- tbl_df(iris)
iris

这显示了文件的头部以及哪些变量没有被打印(如果有的话)。这会告诉我是否存在任何明显的问题,例如数据框未正确加载。我不介意 tail() 但它不会伤害。

接下来我将检查我是否有预期的正确行数(案例)。这是由 dplyr 打印的,或者可以通过以下方式明确检查:

nrow(iris)

从这里开始,它取决于我如何进行的个人数据,但这是@hedgedandlevered 建议的健全性检查的情况。在你的情况下,我会确保纬度和经度坐标看起来合理:

range(df$lat)
range(df$long)
summary(df$lat)
summary(df$long)

我会专门检查 NA,我什至可能会在某些 GIS 软件(或使用 R!)中绘制随机选择的点,以确保这些点看起来合理。

至于年月日,我会做类似的事情 summary/range 以确保这些值是合理的:

range(df$year)  # only you can know what values are sensible
range(df$month)  # hopefully 1 - 12 only!
range(df$day)  # you get the idea...

最后,确保 $datasummary() 甚至箱线图看起来合理:

boxplot(df$data)

如果您有数据(即其中包含数字的数据框,而不是 NA 或 0),您可以假设数据已正确加载。 R'makes stuff up'的情况我还没有遇到过,所以如果那里有东东就对了。话虽如此,如果你遇到 NA 太多的情况,你可以通过以下方式查找它们:

which(is.na(df$data))

这将打印 index/indices 违规行号供您通过子集进一步探索:

例如,如果您在第 1、2 和 3 行中有一个带有 NA 的变量,您可以只查看这些行:

subset <- which(is.na(df$variable))
View(df[subset, ])

添加:来自 v0.99.x 的 RStudio 现在包含一个更复杂的数据视图,因此您可以使用 View(df)(注意大写 'V')打开您的日期并探索,子集,并通过 GUI 更轻松地过滤数据集。

检查和验证数据帧并不简单,也不容易自动化,但有一些工具可以帮助您提高效率。不过,他们并没有说清理和检查数据比无意义的分析花费更多的时间!