2014-05-12 19 views
0

我有非常大的數據集。我必須在我的數據集中進行一些預處理。我在我的數據集中執行以下步驟,但是我得到第二列名稱的數字。但是當我在簡單數據集上運行代碼時,它運行良好。有誰知道問題是什麼?以及如何從輸出中刪除""爲什麼我在R中處理完數據後得到的是數字而不是名字?

我的數據集的某些部分:

> tars.hsa.miRBase[1:4,] 
                                miRBaseid 
1 hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500 
2 hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500 
3 hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500 
4 hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500 
    Gene.Symbol Transcript.ID 
1  SCARA3  NM_016240 
2  IGLON5 NM_001101372 
3  IRF5 NM_001098630 
4  ELL2  NM_012081 

我的代碼:

ind.mirs <- strsplit(tars.hsa.miRBase[, "miRBaseid"], split="/") 

lclus <- (sapply(ind.mirs, length)) 
new.tars <- matrix(NA,sum(lclus),2) 
new.tars[,1] <- do.call(c,ind.mirs) 
new.tars[,2] <- rep(tars.hsa.miRBase$Gene.Symbol, time=lclus) 

輸出的某些部分:

 [,1]   [,2] 
[1,] "hsa-let-7a" "13883" 
[2,] "hsa-let-7b" "13883" 
[3,] "hsa-let-7c" "13883" 
[4,] "hsa-let-7d" "13883" 

我期待什麼:

 miRBaseid   Gene.Symbol 
    [1,] hsa-let-7a SCARA3 
    [2,] hsa-let-7b SCARA3 
    [3,] hsa-let-7c SCARA3 
    [4,] hsa-let-7d SCARA3 
. 
. 
. 
. 

它是如何在簡單的數據工作:

tars.hsa <- data.frame(miR.Family=c("a","b/b","c/c","d/d/d"), Gene.Symbol=paste0("A",1:4,"BG"),stringsAsFactors=FALSE) 
ind.mirs <- strsplit(tars.hsa[, "miR.Family"], split="/") 

lclus <- sapply(ind.mirs, length) 
new.tars <- matrix(NA,sum(lclus),2) 
new.tars[,1] <- do.call(c,ind.mirs) 
new.tars[,2] <- rep(tars.hsa$Gene.Symbol, time=lclus) 

輸出:

 [,1] [,2] 
[1,] "a" "A1BG" 
[2,] "b" "A2BG" 
[3,] "b" "A2BG" 
[4,] "c" "A3BG" 
[5,] "c" "A3BG" 
[6,] "d" "A4BG" 
[7,] "d" "A4BG" 
[8,] "d" "A4BG" 
> 

回答

3

正在發生的事情是,你得到的是對應於「SCARA3」在您的數據集中因子水平的數字指標(在這種情況下,13883)。這是由兩個主要問題引起的:首先,矩陣必須是R中的全部數據類型,其次,代碼將文本視爲因子級別。

如果您使用的是數據框而不是矩陣,則每列可以有自己的數據類型,因此您可以有一列是文本而另一列是數字。或者,您可以嘗試options(stringsAsFactors=FALSE)選項來更改R處理字符串的方式。

擺脫""您擔心的跡象也可以通過將數據作爲數據框而不是矩陣來實現;他們正在出現,因爲你正在創建一個字符矩陣。它們不是被存儲在數據本身中,而是存在於顯示器(IIRC)中。

編輯添加:

好吧,更長的解釋。在R中,當你有一個字符數據向量時,默認情況下R假定那些表示分類變量。例如,如果數據集中的變量race具有不同的字符串(「白色」,「黑色」,「亞洲」等),則會自動創建一個因子。 R中的因素是一種特殊的字符變量,在建模等方面有不同的規則。

如果我從你的問題創建示例數據,就像這樣:

tars.hsa.miRBase <- data.frame(miRBaseid=c("hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500", 
              "hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500", 
              "hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500", 
              "hsa-let-7a/hsa-let-7b/hsa-let-7c/hsa-let-7d/hsa-let-7e/hsa-let-7f/hsa-miR-98/hsa-let-7g/hsa-let-7i/hsa-miR-4458/hsa-miR-4500"), 
           Gene.Symbol=c("SCARA3","IGLON5","IRF5","ELL2"), 
           Transcript.ID=c("NM_016240","NM_001101372","NM_001098630","NM_012081")) 

所產生的數據製成的因素:

[1] SCARA3 IGLON5 IRF5 ELL2 
Levels: ELL2 IGLON5 IRF5 SCARA3 

你可以告訴大家的數據是因爲一個因素結果下方的「級別:」聲明。爲了解決這個問題,你可以告訴R不要把字符串當作因子options(stringsAsFactors=FALSE),你可以通過as.character傳遞數據來忽略因子水平。

> as.character(tars.hsa.miRBase$Gene.Symbol) 
[1] "SCARA3" "IGLON5" "IRF5" "ELL2" 

看看它如何改變輸出?

ind.mirs <- strsplit(as.character(tars.hsa.miRBase[,"miRBaseid"]), split="/") 
lclus <- sapply(ind.mirs, length) 
new.tars <- matrix(NA,sum(lclus),2) 
new.tars[,1] <- do.call(c,ind.mirs) 
new.tars[,2] <- rep(as.character(tars.hsa.miRBase$Gene.Symbol), time=lclus) 

> new.tars 
     [,1]   [,2]  
[1,] "hsa-let-7a" "SCARA3" 
[2,] "hsa-let-7b" "SCARA3" 
[3,] "hsa-let-7c" "SCARA3" 
[4,] "hsa-let-7d" "SCARA3" 
[5,] "hsa-let-7e" "SCARA3" 
+0

當我使用數據框時,出現錯誤和警告。你能否指定你的解決方案? – user2806363

+0

我會看看我是否可以舉一個例子。 – TARehman

+0

這有意義嗎? – TARehman

相關問題