R - as.numeric矩阵

时间:2013-03-19 01:32:35

标签: r

我是R的新手,我正在尝试使用以下代码将数据帧转换为数字矩阵

expData <- read.table("GSM469176.txt",header = F)
expVec <- as.numeric(as.matrix(exp_data))

当我使用as.matrix时,如果没有as.numeric,则返回一些数字(如下所示)

0.083531    0.083496    0.083464    0.083435    0.083406    0.083377    0.083348"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
[9975] "-0.00285  -0.0028274  -0.0028046  -0.0027814  -0.0027574  -0.0027319  -0.0027042  

但是当我输入as.numeric时,它们都被转换为&#34; NA&#34;

如果有人之前提出过这个问题我很抱歉,但我找不到解决问题的帖子。 提前致谢

2 个答案:

答案 0 :(得分:5)

你有2个问题。首先,如果检查数据框的结构,您会注意到第一列是字符:

head(expData)[, 1:4]

            V1         V2         V3         V4
1 YAL002W(cer) 6.1497e-02 6.2814e-02 6.4130e-02
2 YAL002W(par) 7.1352e-02 7.3262e-02 7.5171e-02
3 YAL003W(cer) 2.2428e-02 3.8252e-02 5.4078e-02
4 YAL003W(par) 2.6548e-02 3.6747e-02 4.6947e-02
5 YAL005C(cer) 2.4023e-05 2.3243e-05 2.2462e-05
6 YAL005C(par) 2.0252e-02 2.0346e-02 2.0440e-02

因此,尝试将完整数据框转换为数字将无法按预期工作。

其次,在as.matrix()之后运行as.numeric(),它将矩阵转换为向量:

x <- as.numeric(as.matrix(expData))
# Warning message:
# NAs introduced by coercion 
class(x)
[1] "numeric"
dim(x)
# NULL not a matrix
length(x)
# [1] 14261302

我建议你试试这个:

rownames(expData) <- expData$V1
expData$V1 <- NULL
expData <- as.matrix(expData)
dim(expData)
# [1] 7502 1900
class(expData[, 1])
# [1] "numeric"

答案 1 :(得分:0)

R不知道如何将某些内容转换为数字时,您会获得NA。

具体来说,输出中的引号告诉我你有一个(几个)LNG数字串。要了解为什么这样做不好,请尝试:as.nmeric("-0.00285 -0.0028274")

我不知道您的原始数据是什么样的,但正如@alexwhan所提到的那样,罪魁祸首可能在于您致电read.table

要修复它,请尝试显式设置sep参数(即,在您有标题的位置旁边)

我建议在简单的文本编辑器(TextEdit.app或notepad,而不是Word)中打开原始文件,看看它们是如何分开的。猜猜是

   ..., sep="\t" 

应该做的伎俩。