R - as.numeric矩阵

bio*_*ant 1 r

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

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

当我使用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  
Run Code Online (Sandbox Code Playgroud)

但当我输入as.numeric时,它们都转换为"NA"

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

nei*_*fws 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
Run Code Online (Sandbox Code Playgroud)

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

其次,在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
Run Code Online (Sandbox Code Playgroud)

我建议你试试这个:

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