2014-01-23 30 views
1

我为一家研究机构工作,提供由另一家机构管理的基于网络的数据管理系统。我可以从该系统下载基础数据作为CSV文件的集合。使用Rknitr,我已经在这些文件之上构建了一个适度复杂的报告系统。但是每隔一段时间,另一个机构就会改变数据提取的格式,并炸毁我的报告(或者更糟糕的是,它会以一种我几周没有注意到的微妙而邪恶的方式来改变它)。如何检查新数据摘录是否具有相同的结构?

当这些事情发生时,他们可能永远不会通知我,所以我想我应该进行更多的测试。我想首先测试一下那些CSV文件每次都有相同的结构(但是在我们收集更多数据时允许不同数量的行)。什么是最好的方式来做到这一点? R是我的首选工具,但我有兴趣听到其他人(这是免费的,在Windows上)。谢谢!

回答

2

如果你的文件只是CSV的,这里有一个例子(假设你保持周围的引用文件):

reference.file <- read.csv("ref.csv") 
new.file <- read.csv("new.file") 

struct.extract <- function(df) { 
    list(
    vapply(df, class, character(1L)), 
    attributes(df)[names(attributes(df)) != "row.names"] 
) 
} 
identical(struct.extract(reference.file), struct.extract(new.file)) 

与此相比列的数据帧的属性,以及类。如果你需要更详细的列格式,你可以很容易地扩展。这假定报告不会更改行数(或列数),但如果是这种情况,那么也应该很容易修改。

+0

谢谢 - 这看起来不错。并感谢提醒我澄清,行数每天都在变化。 –

相关问题