2

我是 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 时,它们都被转换为“NA”

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

4

2 回答 2

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"
于 2013-03-19T02:05:41.837 回答
0

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

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

我不知道你的原始数据是什么样的,但正如@alexwhan 提到的,罪魁祸首可能是你打电话给read.table

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

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

   ..., sep="\t" 

应该做的伎俩。

于 2013-03-19T02:39:58.493 回答