2012-01-13 104 views
47

我試圖加載有14列這樣一個CSV文件:重複的 'row.names' 沒有R中允許的誤差編程

起始日期,VAR1,VAR2,VAR3,..., var14

當我發出此命令

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",") 

我得到 「複製row.names不準錯誤信息」。

在我看來,第一列名稱是造成問題。當我手動下載文件並從文件中刪除StartDate名稱時,R成功讀取文件並用X替換第一列名稱。有人能告訴我發生了什麼嗎?該文件是一個逗號分隔的CSV文件。

+1

該鏈接(http://getfile.pl?test.csv)似乎不工作。你可能會複製並粘貼文件的前幾行到問題中,或提供一個工作鏈接? – nograpes 2012-01-13 16:48:49

+0

這只是一個例子。該鏈接是內部的,你無法得到它。文件格式如下所示:date,var1,var2,var3,var4,var5然後填充一些數據。我可以打開文件,這是準確的 – 2012-01-13 17:04:22

+0

系統< - read.table(「http://getfile.pl?test.csv」,header = FALSE,sep =「,」),我似乎得到的文件,但知道我必須處理另一行。如果我打印系統的內容。這是它的樣子:V1 V2 V3 V4 V5 StartDate,Server,uptime,load,memory – 2012-01-13 17:11:18

回答

71

然後告訴函數read.table 使用row.names

systems <- read.table("http://getfile.pl?test.csv", 
         header=TRUE, sep=",", row.names=NULL) 

,現在你的行會簡單地編號。

也期待在read.csv這是read.table的包裝,其已經設置sep=','header=TRUE參數,以便您的通話簡化爲

systems <- read.csv("http://getfile.pl?test.csv", row.names=NULL) 
+0

你的意思是read.csv,而不是你的最終代碼塊上的read.table? – 2012-01-13 17:16:04

+9

我曾嘗試過,它沒有工作。第一列現在稱爲「row.names」,列名移動了一個單元 – 2012-01-13 17:17:45

+0

@Tyler:yup,現在正在修復。謝謝! – 2012-01-13 17:31:01

25

this related post

您的標題行可能比文件的其餘部分少1列。可以通過

  1. 解決此添加定界符到您的標題行的源文件中的端部,或者,
  2. 在數據

例如去除任何尾隨定界符報頭具有少一個柱:

V1,V2,V3
一個,A,A,
B,B,B,

例如添加尾定界符到標題:

V1,V2,V3,
A,A,A,
b,b,b,

0

看來問題可能源於多個原因。以下兩個步驟工作時,我有同樣的錯誤。 1.我將我的文件保存爲MS-DOS csv。 (早些時候,它保存在僅僅csv,Excel 2010中)。 在記事本++中打開csv。沒有昏迷不一致(如上所述@Brian的一致性)。
2.注意我沒有使用參數sep =「,」。我用它和它的工作(即使這是默認參數!)

0

由於上述討論的評論中沒有足夠的觀點,我無法發表,但是我發現這個討論很難閱讀,並且解決方案很難實施。然而,@adrianoesch的答案(https://stackoverflow.com/a/22408965/2236315)應該有幫助(例如,「解決」如果你知道一個解決方案不需要在你的評論中提到的尷尬解決方法(移動列名,複製數據),這將是偉大的。「和」......要求複製數據「由@Frank提出)。

請注意,如果您在某些文本編輯器中打開,則應該看到標題字段的數量少於標題行下方的列數。在我的情況下,數據集在最後一個標題字段的末尾缺少一個「,」。

0

此錯誤的另一個可能的原因是您有整個行重複。如果是這種情況,則通過刪除重複的行來解決問題。

0

你可以在excel中打開並保存在那裏。它會重新格式化CSV,因此它可以正常工作。

+0

你對我的文件是正確的,但什麼是魔術? – Marichyasana 2017-10-26 09:58:40

0

這裏也有類似的問題。通過使用以下函數,在包含因子變量(名義/有序類型)的數據框中,通過將每個變量的所有這些比率錶轉換爲數據框,結果得到一個數據框,其第一列包含重複的名稱。

這些名字不能轉化爲因素,爲了保持它們?這可能如何發生?這可能是解決這個問題的方法! :)

tblFun <- function(x){ 
    tbl <- table(x) 
    res <- cbind(tbl,round(prop.table(tbl)*100,2)) 
    colnames(res) <- c('Count','Percentage') 
    res 
} 

do.call(rbind,lapply(df,tblFun)) 

例DF:

Agree   413  77.34 
Disagree   27  5.06 
Dont know  16  3.00 
Agree   505  94.57 
Disagree   13  2.43 
Dont know   0  0.00 

真誠, 利亞 「Estatistics」 Tsolis

0

不管read.csv函數read.table或的,使row.names = NULL一邊讀文件。它應該工作。它以同樣的方式爲我工作。

0

我在打開CSV文件時發生了此錯誤,並且其中一個字段中嵌入了逗號。該字段引用了它,並且我已經剪切並粘貼了read.table,其中包含quote =「」。一旦我拿出quote =「」出來,read.table的默認行爲就接管了並且解決了問題。所以我從這個去:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",", quote="") 

這樣:

systems <- read.table("http://getfile.pl?test.csv", header=TRUE, sep=",") 
0

在我的情況是在每行的末尾逗號。通過刪除工作