我是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;
如果有人之前提出过这个问题我很抱歉,但我找不到解决问题的帖子。 提前致谢
答案 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"
应该做的伎俩。