2012-07-26 80 views
12

我想讀一個大的製表符分隔的文件中R.閱讀製表符分隔的數據在與R

首先我嘗試這樣做:

data <- read.table("data.csv", sep="\t") 

但它讀了一些數字變量的作爲因子

所以,我想基於什麼類型我想每個變量的數據讀取是這樣的:

data <- read.table("data.csv", sep="\t", colClasses=c("character","numeric","numeric","character","boolean","numeric")) 

但當我嘗試這一點,給我一個錯誤:

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : scan() expected 'a real', got '"4"'

我認爲這可能是身邊有一些最初的原始文件的數值的報價,但我不知道。

回答

7

沒有看到你的數據,你有幾件事情之一:你沒有所有的選項卡分隔數據;在單個觀察中有嵌入的標籤;或其他人的禮物。

您可以對此進行排序的方法是設置options(stringsAsFactors=FALSE)然後使用您的第一行。

檢出str(data)並試圖找出哪些行是罪魁禍首。某些數字值讀取的原因是因爲該列中有某些R正在解釋爲字符,因此它將整個字段強制爲字符。它通常需要一些挖掘,但問題幾乎可以肯定與您的輸入文件。

這是一個常見的數據管理問題,祝你好運!

+0

感謝您的回覆。這有幫助,但不是導入我想導入爲數字的變量,而是將它們導入爲字符。當我嘗試將其轉換爲數字變量時,它會給我所有觀察值的NA。我會仔細研究一下數據,看看你提出的建議 – Ford 2012-07-26 18:55:48

+0

哦,仔細看看你的錯誤,你有四個引用。 「4」R已經爲它附加了一個單引號''4''。這意味着在你的tsv文件中,你的數字被引用,因此被視爲字符。在你的read.table行添加quote ='「',看看它是如何工作的 – Justin 2012-07-26 19:03:05

+0

問題是我的原始數據文件中的值用引號引起來,所以它應該是以字符的形式讀取值數字我試過了上面提到的quote =''',但是這並不能解決問題......原始數據文件也太大,所以我不能刪除文本編輯器或Excel中的引號而不會崩潰程序 – Ford 2012-07-26 20:07:13

1
x <- paste("'",floor(runif(10,0,10)),"'",sep="") 
x 

[1] "'7'" "'3'" "'0'" "'3'" "'9'" "'1'" "'4'" "'8'" "'5'" "'8'" 

as.numeric(gsub("'", "",x)) 

[1] 7 3 0 3 9 1 4 8 5 8