2015-07-20 86 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