【问题标题】:Issues importing csv data into R where the data contains additional commas将 csv 数据导入 R 时出现问题,其中数据包含额外的逗号
【发布时间】:2018-01-10 15:55:04
【问题描述】:

我有一个非常大的数据集,出于说明目的,如下所示。

Cust_ID、Sales_Assistant、商店
123 , 玛丽, 沃辛顿, 22
456,杰克,查尔斯,42

真实数据有更多的列和数百万行。我正在使用以下代码将其导入到 R 中,但由于其中一列或多列在数据中有逗号(请参阅上面的 Sales_Assistant),因此它失败了。

df <- read.csv("C:/dataextract.csv", header = TRUE , as.is = TRUE , sep = "," , na.strings = "NA" , quote = "" , fill = TRUE , dec = "." , allowEscapes = FALSE , row.names=NULL)

添加 row.names=NULL 会导入所有数据,但会将 Sales_Assistant 列拆分为两列,并使所有其他数据失去对齐。如果我在没有这个的情况下运行代码,我会收到错误...

read.table 中的错误(file = file,header = header,sep = sep,quote = quote,:不允许重复的 'row.names'

...数据不会加载。

您能想出一种不涉及从源头处理数据或在文本编辑器中打开数据的方法吗? R中有解决方案吗?

【问题讨论】:

    标签: r csv


    【解决方案1】:

    首先,它是一个 csv 文件。 “Mary, Worthington”是为了回应两列。如果值中有逗号,请考虑使用 tsv(制表符分隔值)保存数据。

    但是,如果您的数据在某种意义上具有良好对齐的每行相同数量的逗号,我会考虑忽略数据框的第一行(这是您读取文件时的列名)并重新分配它正确的列名字。

    例如,在您的情况下,您可以将 Sales_Assistant 替换为

    Sales_Assistant_First_Name, Sales_Assistant_Last_Name
    

    这很有意义。那我基本上可以做

    df <- df[-1, ]    
    colnames(df) <- c("Cust_ID" , "Sales_Assistant_First_Name" , "Sales_Assistant_Last_Name", "Store")
    

    【讨论】:

    • 感谢您的贡献。这对于数据集来说有点太手动了,因为有几列受所描述的问题影响,我宁愿有一个基于代码的解决方案,而不是手动输入不同的列名称。 :)
    【解决方案2】:
    df <- read.csv("C:/dataextract.csv", skip = 1, header = FALSE)
    df_cnames <- read.csv("C:/dataextract.csv", nrow = 1, header = FALSE)
    
    df <- within(df, V2V3 <- paste(V2, V3, sep = ''))
    df <- subset(df, select = (c("V1", "V2V3", "V4")))
    colnames(df) <- df_cnames
    

    可能需要根据实际来源进行一些修改

    【讨论】:

    • 我喜欢你使用这个的方式,它一直运行到我运行的地步... colnames(df)
    • 此问题与作为因素的 df_cnames 数据有关。以下修复了它... df_cnames
    • 您也可以将 stringsAsFactors = FALSE 作为参数添加到 read.csv。甚至使用选项(stringsAsFactors = FALSE)将其设置为全局。将字符串作为因素阅读往往会让人感到困惑而不是有帮助。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2011-02-03
    • 2020-07-20
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多