2014-02-19 41 views
1

在R中,我導入的csv文件在標題行末尾缺少逗號。我每天下載新文件,所以我想弄清楚如何在R中解決問題,而不是每次編輯文件。這是一個例子。R導入csv並在標頭上缺少逗號

head1,head2,head3"dat1","dat2","123","dat1b","dat2b","456" 

這些文件似乎圍繞所有數據引號,而不僅僅是字符串。我使用的進口方法是:

mydata <-read.csv('mycsv.csv', stringsAsFactors=FALSE) 

可能我可以找到第一個引號並在它前面插入一個逗號。

在此先感謝

+0

缺少一個逗號,或缺少換行符? –

+0

標題的元素是否也被引用?所有文件的標題是否相同? – jbaums

+0

標題不在引號內,元素用引號引起來。我不確定它是否缺少逗號或換行符。我如何檢查? - 感謝 – John

回答

7

這可能不是最優雅的解決方案,但它可能就足夠了。

首先,閱讀整行內容,而不是試圖直接解釋爲csv。在第一個代碼塊中,我已經使用了textConnection,您可以提供文件路徑或網址,例如readLines('/path/to/my/strange.csv')

tmp <- readLines(textConnection('head1,head2,head3"dat1","dat2","123" 
"dat3","dat4","456" 
"dat5","dat6","789" 
"dat7","dat8","012" 
"dat9","dat10","345" 
"dat11","dat12","678"')) 

然後有點第一行的操縱:

h <- sub('\".*', '', tmp[1]) # extracts the headers from the first line 
row1 <- sub('[^\"]*(.*)', '\\1', tmp[1]) # extracts the first row's data 
tmp <- c(row1, tmp[-1]) # combines the first row's data with subsequent rows' data 

現在解釋是一個CSV:

dat <- read.csv(textConnection(tmp), header=FALSE) # read tmp in as a csv 
names(dat) <- strsplit(h, ',')[[1]] # add headers 

dat 

    head1 head2 head3 
1 dat1 dat2 123 
2 dat3 dat4 456 
3 dat5 dat6 789 
4 dat7 dat8 12 
5 dat9 dat10 345 
6 dat11 dat12 678 
+0

這些文件的標題太多,而且它們有所不同,因此我無法指定標題名稱。謝謝你嘗試! – John

+0

您不需要使用此方法指定標題名稱。它們是用正則表達式提取的。這裏的模式將第一行中的所有內容都包含在第一個'''中,並假定它構成了頭文件,並且假定頭文件是用逗號分隔的(沒有最終的逗號),試試吧,看看 – jbaums

+0

好的,我會嘗試看到了,我一定會回來的。謝謝 – John

0

您可以嘗試

data=scan(file.choose(),"")