我粘贴了下面代码的重要部分。基本上我正在创建一个data.frame,其中两列包含数值,一列包含因子。
我正在尝试转换"位置"列到数值,但是一旦我这样做,位置值由于某种原因切换。
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行长。我是否正在创建data.frame这个问题?还是我忽略了一个小错误?
感谢您的帮助
答案 0 :(得分:2)
可重现的例子很好。
我怀疑是因为class(A$Location)
是一个因素,而不是一个角色。
在这种情况下,您需要as.numeric(as.character(Location))
来获取所需的数字。这是因为R在执行a(字符串,而非数字 - 因此10在2之前)排序之后将因子编码为整数1:nlevels(your.factor)
。
您可以在stringsAsFactors=F
来电中设置data.frame
- 在fillmatrix <- ...
行,您似乎正在通过strsplit
on“将所有内容转换为字符(为什么会这样做)您将f
粘贴在一起只是为了将其再次拆分?)