2015-07-20 92 views
0

我在下面粘貼了我的代碼的重要部分。基本上我創建了一個data.frame,其中兩列包含數值,一列包含因子。R:as.numeric數據框混亂值的順序

我試圖將「位置」列轉換爲數值,但是一旦我這樣做,位置值出於某種原因切換。

f <- fread("ABC.txt",header=F,skip=1)$V1 
f <- paste(f, collapse = "") 

vector <- 1:stri_length(f) 

fillmatrix <- c(rbind(strsplit(f, "")[[1]], vector)) 
A <- data.frame(1,matrix(fillmatrix, ncol=2, byrow = TRUE)) 
A <- A[c(1,3,2)] 
colnames(A)=c("Track","Location","Base") 

class(A$Track) 
# [1] "factor" 

A[1:15,] # Before as.numeric 
    Track Location Base 
# 1  1  1 A 
# 2  1  2 C 
# 3  1  3 G 
# 4  1  4 G 
# 5  1  5 A 
# 6  1  6 A 
# 7  1  7 T 
# 8  1  8 A 
# 9  1  9 A 
# 10 1  10 A 
# 11 1  11 A 
# 12 1  12 T 
# 13 1  13 T 
# 14 1  14 C 
# 15 1  15 C 

a <- transform(A, Location = as.numeric(Location), Track = as.numeric(Track)) 

a[1:15,]  # After as.numeric 
# Track Location Base 
# 1  1  1 A 
# 2  1  112 C 
# 3  1  223 G 
# 4  1  334 G 
# 5  1  445 A 
# 6  1  556 A 
# 7  1  667 T 
# 8  1  679 A 
# 9  1  690 A 
# 10 1  2 A 
# 11 1  13 A 
# 12 1  24 T 
# 13 1  35 T 
# 14 1  46 C 
# 15 1  57 C 

A數據幀相當長〜700行長。我創建數據的方式是這個問題嗎?或者我忽略了一個小錯誤?

感謝您的幫助

回答

2

一個可重複的例子會很好。

我懷疑這是因爲class(A$Location)是一個因素,而不是一個字符。 在這種情況下,您需要as.numeric(as.character(Location))才能根據需要獲取數字。這是因爲R在做一個(字符串,不是數字 - 因此10在2之前)排序之後編碼因子就像整數1:nlevels(your.factor)

你可以在你data.frame呼叫建立stringsAsFactors=F - 在你的fillmatrix <- ...行你似乎通過「做strsplit轉產一切字符」(?爲什麼你粘貼f在一起只是爲了回來了再拆呢)

+0

'ABC.txt'裏面有一些'\ n',這就是我爲什麼要調用粘貼功能來將所有東西都合併成一個長字符串的原因。 – ALKI