我有一个字符串矩阵,其中的字段来自科学记数法中的数字。我想将字符矩阵转换为数据框并处理数字字段。在矩阵到数据帧转换期间,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>
答案 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...
...但如果您可以避免首先将矩阵值存储为字符串,那会更好!除非您从文件中加载它们,否则应该没有任何理由。如果您碰巧将它们作为其他操作的字符串,您应该回顾一下该操作,看看如何避免丢失数字模式。