R:将数据推送到矩阵,给出奇怪的行为

时间:2014-07-11 05:29:03

标签: r matrix heatmap

您好我正在将数据推送到矩阵中,因此我可以创建热图。我使用的代码与此处发布的代码相同(http://sebastianraschka.com/Articles/heatmaps_in_r.html)。对于我的一些数据集,当我将数据推入矩阵格式时,由于某些值正在发生变化,我会遇到奇怪的行为。我的一些数据集工作正常,但其他数据集没有,我不确定这种奇怪行为背后的主要区别是什么。

示例代码;

data <- read.csv("mydata.txt", sep="\t", header =TRUE) 
rnames <- data[,1] 
mat_data <- data.matrix(data[,2:ncol(data)]) 
rownames(mat_data) <- rnames 

现在示例数据帧..

head(data)
1        1.108029        0.42        0.19        0.04        0.47       -0.08        0.47        0.04        0.10
2        1.108029        0.34        0.40        0.25        0.56       -0.08       -0.06        0.11        0.20
3        1.121099         0.1       -0.45        0.11       -0.22       -0.07       -0.40        0.24       -0.17
4        1.123857        0.26       -0.15        0.15        0.31         0.2       -0.24       -0.27        0.40
5        1.129303        0.11        0.13        0.01       -0.11        0.38        0.29       -0.15       -0.18
6        1.135904         0.4        0.07        0.11        0.03         0.6       -0.32        0.14       -0.12

head(mat_data)
             tg_q2_rep_A tg_q2_rep_B tg_q2_rep_C tg_q2_rep_D tg_q4_rep_A tg_q4_rep_B tg_q4_rep_C tg_q4_rep_D
1.10802929          70        0.19        0.04        0.47           5        0.47        0.04        0.10
1.1080293           65        0.40        0.25        0.56           5       -0.06        0.11        0.20
1.12109912          49       -0.45        0.11       -0.22           4       -0.40        0.24       -0.17
1.12385707          62       -0.15        0.15        0.31          53       -0.24       -0.27        0.40
1.12930344          50        0.13        0.01       -0.11          65        0.29       -0.15       -0.18
1.1359041           69        0.07        0.11        0.03          69       -0.32        0.14       -0.12

您可以看到rownames已将数字附加到末尾,并且tg_q2_rep_A和tg_q4_rep_A的第一个数据已更改。

如果有人可以建议如何接近这一点,我会很感激。我一直试图解决这个问题:/

修改

根据要求..

> str(data)
'data.frame':   137 obs. of  33 variables:
 $ CpG_id.chr.pos.: num  1.11 1.11 1.12 1.12 1.13 ...
 $ tg_q2_rep_A    : Factor w/ 75 levels "-0.01","-0.02",..: 70 65 49 62 50 69 71 63 57 7 ...
 $ tg_q2_rep_B    : num  0.19 0.4 -0.45 -0.15 0.13 0.07 0.5 -0.33 0.23 -0.22 ...
 $ tg_q2_rep_C    : num  0.04 0.25 0.11 0.15 0.01 0.11 0.16 0.03 0.23 -0.32 ...
 $ tg_q2_rep_D    : num  0.47 0.56 -0.22 0.31 -0.11 0.03 0.31 0.21 0 0.06 ...
 $ tg_q4_rep_A    : Factor w/ 73 levels "-0.04","-0.05",..: 5 5 4 53 65 69 50 53 59 46 ...
 $ tg_q4_rep_B    : num  0.47 -0.06 -0.4 -0.24 0.29 -0.32 0.07 -0.23 0.1 -0.09 ...
 $ tg_q4_rep_C    : num  0.04 0.11 0.24 -0.27 -0.15 0.14 0.14 0.36 0.1 -0.05 ...
 $ tg_q4_rep_D    : num  0.1 0.2 -0.17 0.4 -0.18 -0.12 0.15 0.18 -0.21 -0.14 ...
 $ tg_q6_rep_A    : Factor w/ 79 levels "-0.02","-0.03",..: 46 3 7 67 65 77 64 61 41 12 ...
 $ tg_q6_rep_B    : Factor w/ 87 levels "-0.01","-0.03",..: 68 79 34 11 82 1 63 1 36 32 ...
 $ tg_q6_rep_C    : num  0.22 0.5 -0.32 0.13 0.24 0.25 0.35 0.07 0.01 -0.44 ...
 $ tg_q6_rep_D    : Factor w/ 82 levels "-0.04","-0.05",..: 55 50 27 74 71 68 73 61 5 31 ...
 $ tg_q8_rep_A    : Factor w/ 73 levels "-0.01","-0.02",..: 49 9 2 52 45 50 13 55 48 9 ...
 $ tg_q8_rep_B    : num  0.05 0.07 -0.31 0.02 0 -0.33 0.03 -0.05 0.08 0.1 ...
 $ tg_q8_rep_C    : num  0.35 0.5 -0.06 -0.1 0.24 -0.45 -0.27 0.1 0.15 -0.29 ...
 $ tg_q8_rep_D    : num  0.15 0.08 -0.08 0.31 0.28 0.43 0.41 0.25 -0.05 -0.04 ...
 $ tg_w2_rep_A    : Factor w/ 72 levels "-0.01","-0.02",..: 49 16 24 66 60 62 62 68 52 49 ...
 $ tg_w2_rep_B    : num  0.11 0.24 -0.03 -0.43 0.67 -0.13 0.05 -0.4 -0.13 -0.18 ...
 $ tg_w2_rep_C    : num  0 0.33 -0.09 0 0.12 -0.35 0.06 0.33 0.15 -0.19 ...
 $ tg_w2_rep_D    : num  -0.04 0 -0.03 0.44 0.04 0.23 0.28 0.19 -0.21 -0.17 ...
 $ tg_w4_rep_A    : Factor w/ 69 levels "-0.0","-0.01",..: 55 58 53 50 52 67 68 63 27 8 ...
 $ tg_w4_rep_B    : num  0.29 0.63 -0.37 0.09 0.22 -0.21 0.1 -0.14 -0.04 -0.09 ...
 $ tg_w4_rep_C    : num  0.09 0.13 -0.08 0.17 0.15 -0.33 0 0.38 0.1 -0.62 ...
 $ tg_w4_rep_D    : num  0.11 0.33 -0.32 0.41 -0.1 0.07 0.23 0.22 0.1 0.06 ...
 $ tg_w6_rep_A    : Factor w/ 74 levels "-0.01","-0.02",..: 56 45 4 69 59 47 2 40 47 12 ...
 $ tg_w6_rep_B    : num  0.07 0.13 -0.14 0.15 0.13 -0.17 0.33 0.12 0.07 -0.15 ...
 $ tg_w6_rep_C    : num  0.13 0.22 0.31 0.08 0.16 -0.33 -0.05 0.43 0.43 -0.06 ...
 $ tg_w6_rep_D    : num  0.28 0.11 -0.2 0.66 -0.18 0.16 0.26 0.27 0.06 -0.02 ...
 $ tg_w8_rep_A    : Factor w/ 67 levels "-0.01","-0.02",..: 52 40 37 44 48 61 48 53 39 63 ...
 $ tg_w8_rep_B    : num  0.3 0.09 -0.22 -0.1 0.14 -0.25 0.1 -0.49 0.19 0.15 ...
 $ tg_w8_rep_C    : num  0.23 0.27 0.11 -0.25 0.17 -0.13 0.23 0.47 0.33 -0.09 ...
 $ tg_w8_rep_D    : num  -0.04 0.1 -0.25 0.37 -0.09 0.18 0.26 0.2 -0.35 -0.11 ...

1 个答案:

答案 0 :(得分:1)

你的rownames的问题在于它们并不是唯一的。 R需要每行的唯一标识符,并且data.frame&#34; data&#34;中有多个具有相同值的行。当你试图强迫它在第一列rownames中创建值时,它试图使它们成为唯一的,看起来好像它绕过一些数字来完成它。

我不完全确定列tg_q2_rep_A和tg_q4_rep_A会发生什么,但看起来这些值已经转换为排名。如果原始data.frame,data中的那些列的类是&#34; factor&#34;那么就会发生这种情况。而不是&#34;数字&#34;。试试这个来检查课程:

sapply(data, class)

例如,如果您在该列中混合了数字和字母,则R会默认将数据类设置为因子。当您将这些列转换为数字格式时,这就是data.matrix()的作用,输出将是该因子的等级。

当我将数据复制并粘贴到csv文件并将其加载到R中时,我没有为这两列提出相同的问题,但我猜测你还没有给我们那里的所有数据。我弄清楚这一点的第一步是检查列的类。