2014-10-04 123 views
-1

Exctracting雙打的向量我使用read.table()具有或不具有header=T這個問題,嘗試從得到的data.frame提取與as.double(as.character())雙打的載體(參見?factor)。的R - 從data.frame

但這只是如何我意識到我不明白R的邏輯。所以你不會看到例如read.table在下面的代碼中,只有必要的部分。你能告訴我下列選項有什麼區別?

  1. 隨着header=T相當於:

    (a <- data.frame(array(c(0.5,0.5,0.5,0.5), c(1,4)))) 
    as.character(a) 
    # [1] "0.5" "0.5" "0.5" "0.5" 
    
  2. 沒有header=T相當於:

    b <- data.frame(array(c("a",0.5,"b",0.5,"c",0.5,"d",0.5), c(2,4))) 
    (a <- b[2,]) 
    as.character(a) 
    # [1] "1" "1" "1" "1" 
    
    (a <- data.frame(a, row.names=NULL)) # now there's not even a visual difference 
    as.character(a) 
    # [1] "1" "1" "1" "1" 
    
+1

你處理'factor's。在您的'data.frame'步驟中添加'stringsAsFactors = FALSE'並進行比較。 – A5C1D2H2I1M1N2O1R2T1 2014-10-04 16:57:23

+0

使用'read.table'和變體時的'stringsAsFactors'轉換是混淆的常見原因。與往常一樣,在數據中使用'str'來準確理解您正在處理的內容可能非常有價值。一旦你意識到'stringsAsFactors'的參數,它就成爲一個非常有用的工具。如果您選擇'options(stringsAsFactors = FALSE)',您也可以在全局範圍內設置該選項。 – 2014-10-04 17:04:38

+0

哇,謝謝。我會閱讀一些因素。 – 9877126 2014-10-04 17:04:50

回答

0

的問題出在data.frame,其中的選項之一,stringsAsFactors默認設置設置爲TRUE。這是您的方案中的一個問題,因爲當您使用header = FALSE時,該行中字符值的存在將整個列強制轉換爲字符,然後轉換爲因子(除非您設置stringsAsFactors = FALSE)。

下面是一些例子玩:

## Two similar `data.frame`s -- just one argument different 

b <- data.frame(array(c("a",0.5,"b",0.5,"c",0.5,"d",0.5), c(2,4))) 
b2 <- data.frame(array(c("a",0.5,"b",0.5,"c",0.5,"d",0.5), c(2,4)), 
       stringsAsFactors = FALSE) 

## First with "b" 

as.character(b[2, ]) 
# [1] "1" "1" "1" "1" 

sapply(b[2, ], as.character) 
# X1 X2 X3 X4 
# "0.5" "0.5" "0.5" "0.5" 
as.matrix(b)[2, ] 
# X1 X2 X3 X4 
# "0.5" "0.5" "0.5" "0.5" 
as.double(as.matrix(b)[2, ]) 
# [1] 0.5 0.5 0.5 0.5 

## Now with "b2" 

as.character(b2[2, ]) 
# [1] "0.5" "0.5" "0.5" "0.5" 
as.double(as.character(b2[2, ])) 
# [1] 0.5 0.5 0.5 0.5 
+0

感謝您的回答。我現在在'read.table' /'colClasses'中看到這個假設(順便提及),它是應該屬於同一類的數據的*列*。有沒有辦法將其更改爲行?你知道我懷疑它,但它可能很有趣。 (對於類似的假設,是否有很好的幫助?) – 9877126 2014-10-04 17:39:15

+0

@ 9877126,不是我所知道的。 'list's讓你存儲不同類型的信息。 (實際上,'data.frame'是一個特殊的'list'類型。) – A5C1D2H2I1M1N2O1R2T1 2014-10-04 17:46:05