当R中的read.csv时,检查表的标题符合预期

时间:2018-03-05 16:19:21

标签: r

我正在尝试在我的R脚本中插入一个检查步骤,以确定我正在阅读的CSV表的结构是否符合预期。 查看详细信息: table.csv具有以下colnames: [1]“A”,“B”,“C”,“D”

此文件由其他人生成,因此我想在脚本开头确保列名和列的数量/顺序没有变化。

我尝试执行以下操作:

    #dataframes to import
    df_table <- read.csv('table.csv')

    #define correct structure of file
    Correct_Columns <- c('A','B','C','D')
    #read current structure of table
    Current_Columns <- colnames(df_table)

    #Check whether CSV was correctly imported from Source
    if(Current_Columns != Correct_Columns)

    {
    # if structure has changed, stop the script. 
    stop('Imported CSV has a different structure, please review export from Source.')
    } 
    #if not, continue with the rest of the script...

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

使用基础R,建议您查看all.equal()identical()any()

请参阅以下示例:

a <- c(1,2)
b <- c(1,2)
c <- c(1,2)
d <- c(1,2)
df <- data.frame(a,b,c,d)

names.df <- colnames(df)
names.check <- c("a","b","c","d")

!all.equal(names.df,names.check)
# [1] FALSE

!identical(names.df,names.check)
# [1] FALSE

any(names.df!=names.check)
# [1] FALSE

以下,您的代码可以修改如下:

if(!all.equal(Current_Columns,Correct_Columns))
{
# call your stop statement here
} 

您的代码可能会发出警告,因为Current_Columns!=Correct_Columns将比较向量的所有条目(即,在控制台上自行运行Current_Columns!=Correct_Columns将返回具有TRUE / FALSE值的向量)。

相反,all.equal()identical()将比较整个向量,同时将它们视为对象。

为了完整起见,请注意all.equal()identical()之间的细微差别。在你的情况下,你使用哪一个并不重要,但在处理数字向量时它会变得很重要。有关详细信息,请参阅here

答案 1 :(得分:0)

data.table的快速方法:

return this.isTokenBeingRenewed ? wsCall() : this.handleAccessTokenExpiration().switchMap(() => wsCall());

检查成对匹配是否存在错误:

library(data.table)
DT <- fread("table.csv")
Correct_Columns <- c('A','B','C','D')
Current_Columns <- colnames(df_table)

}