2017-08-03 68 views
0

我有一個非常大的數據集,用於說明目的看起來如下所示。將csv數據導入到R的問題,其中數據包含額外的逗號

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(文件=文件,標題=標題,sep = sep,quote = quote,:重複'row.names'是不允許的

...並將這些數據將不會加載。

你能想到解決的辦法,不涉及從源頭上解決了數據,或者在文本編輯器打開它?是否有解決方案在R?

回答

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 

這可能需要一些修改,這取決於實際的源

+0

我喜歡你這樣做的方式,它運行到我運行的點...... colnames(df)< - df_cnames。具有df_cnames數據框中所需的colname的行具有行號1.然後colnames(df)< - df_cnames代碼將目標df中的所有列重命名爲1? –

+0

此問題與df_cnames數據爲因素有關。下面解決它... df_cnames < - data.frame(lapply(df_cnames,as.character),stringsAsFactors = FALSE) –

+0

您也可以添加stringsAsFactors = FALSE作爲read.csv的參數。甚至可以使用options(stringsAsFactors = FALSE)來設置全局。閱讀字符串作爲因素更容易混淆,然後很有幫助。 – Ape

1

首先,它是一個csv文件,「Mary,Worthington」是爲了響應兩列,如果你的值有逗號,考慮使用tsv保存數據(tab-separated值)。但是,如果你的數據每行有相同數量的逗號並且在某種意義上具有良好的對齊性,那麼我會考慮忽略數據幀的第一行(這是讀取文件時的列名)並重新分配它。列名稱。

例如,在你的情況,你可以通過

Sales_Assistant_First_Name, Sales_Assistant_Last_Name 

這是非常合情合理的替代Sales_Assistant。然後,我可以基本上做到

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

感謝貢獻上。這對於數據集來說太過於人手,因爲有幾列受到所述問題的影響,我寧願有一個基於代碼的解決方案,而不是手動輸入不同的col名稱。 :) –