【问题标题】:R: as.numeric data frame messing up order of valuesR:as.numeric 数据框弄乱了值的顺序
【发布时间】:2015-07-20 01:58:44
【问题描述】:

我在下面粘贴了我的代码的重要部分。基本上,我正在创建一个 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的方式是问题吗?还是我忽略了一个小错误?

感谢您的帮助

【问题讨论】:

    标签: r


    【解决方案1】:

    一个可重现的例子会很好。

    我怀疑这是因为class(A$Location) 是一个因素,而不是一个字符。 在这种情况下,你需要as.numeric(as.character(Location)) 来获取你想要的数字。这是因为 R 在进行(字符串,而不是数字 - 所以 10 在 2 之前)排序之后将因子编码为整数 1:nlevels(your.factor)

    您可以在data.frame 调用中设置stringsAsFactors=F - 在您的fillmatrix &lt;- ... 行中,您似乎通过在“”上执行strsplit 将所有内容转换为字符(为什么您只将f 粘贴在一起再把它分开?)

    【讨论】:

    • ABC.txt 有一些 \n ,这就是为什么我调用 paste 函数将所有内容折叠成一个长字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多