2012-01-14 64 views
1

我有一個字符串矩陣,其中的字段是以科學記數法中的數字派生的。我想將字符矩陣轉換爲數據框並處理數字字段。在矩陣到數據幀的轉換過程中,R將字符串轉換爲因子,可能是因爲數字中間的'e'字符。如果stringAsFactors()選項設置爲FALSE,則這些列將保留爲字符,因此仍然不是數字。R數據框:如何控制包含科學記數法字符串的矩陣轉換爲數字

例如:

> m 
    [,1] [,2] 
[1,] "1e-07" "4e-06" 
[2,] "2e-05" "5e-05" 
[3,] "0.03" "1e-07" 
> data.frame(m) 
    X1 X2 
1 1e-07 4e-06 
2 2e-05 5e-05 
3 0.03 1e-07 
> class(data.frame(m)) 
[1] "data.frame" 
> df = data.frame(m) 
> df 
    X1 X2 
1 1e-07 4e-06 
2 2e-05 5e-05 
3 0.03 1e-07 
> class(df$X1) 
[1] "factor" 
> class(df$X2) 
[1] "factor" 

我怎樣才能迫使數據幀來解釋這些字符串的數字嗎? data.matrix()實際上是將科學記數法中的字符串轉換爲數字,但我想知道是否有辦法直接控制字符矩陣轉換爲數據幀,而無需經過中間的data.matrix()轉換步驟。

回答

7

您應該首先將其更改爲數字矩陣,然後然後將它作爲data.frame。

# A string matrix 
m <- matrix(as.character(runif(6)),3) 

# as.data.frame doesn't turn it into numbers... 
str(as.data.frame(m)) # factors 
str(as.data.frame(m, stringsAsFactors=FALSE)) # strings 

d <- m 
# Make it numeric first 
mode(d) <- "numeric" 

# Now turn it into a data.frame... 
d <- as.data.frame(d) 
str(d) # numeric 

str(m) # still strings... 

......但是如果你可以避免將矩陣值作爲字符串存儲在首位,那將會更好!除非你從文件中加載它們,否則不應有任何理由。如果你碰巧把它們作爲其他操作的字符串,你應該回頭看看這個操作,看看如何避免丟失數字模式。

+0

是的,這就是我使用data.matrix()所做的。有沒有辦法避免矩陣轉換步驟?數據幀轉換在沒有涉及科學記數法的情況下將字符串數字轉換爲數字。 – 2012-01-14 22:51:49

+0

...你需要提供一個這樣的例子。我無法重現這一點。我更新了上面的例子 - 並沒有涉及科學記數法。 'as.data.frame'仍然會生成因子或字符串列... – Tommy 2012-01-14 22:59:19

+0

請參閱編輯的擴展示例 – 2012-01-15 20:44:38

相關問題