R数据框:如何控制包含科学记数法字符串的矩阵到数字的转换

时间:2012-01-14 21:51:10

标签: r dataframe

我有一个字符串矩阵,其中的字段来自科学记数法中的数字。我想将字符矩阵转换为数据框并处理数字字段。在矩阵到数据帧转换期间,R将字符串转换为因子,可能是因为数字中间的“e”字符。如果stringAsFactors()选项设置为FALSE,则列将保留为字符,因此仍然不是数字。

例如:

> m
     [,1]    [,2]   
[1,] "1e-07" "4e-06"
[2,] "2e-05" "5e-05"
[3,] "0.03"  "1e-07"
> data.frame(m)
     X1    X2
1 1e-07 4e-06
2 2e-05 5e-05
3  0.03 1e-07
> class(data.frame(m))
[1] "data.frame"
> df = data.frame(m) 
> df
     X1    X2
1 1e-07 4e-06
2 2e-05 5e-05
3  0.03 1e-07
> class(df$X1)
[1] "factor"
> class(df$X2)
[1] "factor"

如何强制数据框将这些字符串解释为数字? data.matrix()实际上将科学记数法中的字符串转换为数字,但我想知道是否有一种方法可以直接控制字符矩阵到数据帧转换,而无需通过中间data.matrix()转换步骤。 / p>

1 个答案:

答案 0 :(得分:7)

首先应将其更改为数字矩阵,然后制作数据矩阵。

# A string matrix
m <- matrix(as.character(runif(6)),3)

# as.data.frame doesn't turn it into numbers...
str(as.data.frame(m)) # factors
str(as.data.frame(m, stringsAsFactors=FALSE)) # strings

d <- m
# Make it numeric first
mode(d) <- "numeric"

# Now turn it into a data.frame...
d <- as.data.frame(d)
str(d) # numeric

str(m) # still strings...

...但如果您可以避免首先将矩阵值存储为字符串,那会更好!除非您从文件中加载它们,否则应该没有任何理由。如果您碰巧将它们作为其他操作的字符串,您应该回顾一下该操作,看看如何避免丢失数字模式。