将csv数据导入R的问题,其中数据包含其他逗号

时间:2017-08-03 07:24:33

标签: r csv

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

Cust_ID,Sales_Assistant,Store
123,Mary,Worthington,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中有解决方案吗?

2 个答案:

答案 0 :(得分:1)

首先,它是一个csv文件。 &#34; Mary,Worthington&#34;意在回应两列。如果您的值中包含逗号,请考虑使用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")

答案 1 :(得分:0)

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

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