0

我对 R 完全陌生。我有一些脚本可以从 .cvs 文件中读取数据来绘制它们。他们阅读完整的表格并将数据绘制在特定列(例如第 6 列)中:

tablecsv <- read.csv("myfile.csv", header=TRUE)
plot.values_csv <- tablecsv[,6]

然后我将它们更改为从制表符分隔的文件中读取数据(使用read.delim和/或read.table)。

tabletab <- read.delim("myfile.tab", header=TRUE, sep="\t")
plot.values_tab <-tabletab[,6]

奇怪的是,现在列的编号发生了变化。“tabletab”中的第 6 列始终对应于“tablecsv”中的第 7 列。“tabletab”中的第 1 列将对应于“tablecsv”中的第 2 列。因此,似乎通过使用read.tableor read.delim,输入文件中的第一列被忽略或解释为注释。我似乎无法使用任何参数将其关闭。我试过设置skip = 0,但这并没有改变任何东西,无论如何都是默认参数。据我所知,第一列也不包含一个#字符,这是默认的注释符号。

有人对这种行为有解释吗?(我知道通过更改脚本中的列号来解决问题并不难。只是这种行为对我来说毫无意义)。

编辑:这里分别是 .csv 和 .tab 输入文件的前几行:

我的文件.csv:

name,A,B,C,D,E,F,G,H,I,J,K
xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_-,0.242718447,0.35483871,0.166666667,0.2,0.368932039,0.451612903,0.333333333,0.418604651,0.333333333,0.763109267,0.711142183
xxx_NODE_22738_yyy_415_zzz_2.453012_1_455_+,0.152317881,0.1875,0.214285714,0.120879121,0.231788079,0.25,0.464285714,0.35,0.153846154,0.635002306,0.612372436

我的文件.tab:

name    A   B   C   D   E   F   G   H   I   J   K
xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_- 0.242718447 0.35483871  0.166666667 0.2 0.368932039 0.451612903 0.333333333 0.418604651 0.333333333 0.763109267 0.711142183
xxx_NODE_22738_yyy_415_zzz_2.453012_1_455_+ 0.152317881 0.1875  0.214285714 0.120879121 0.231788079 0.25    0.464285714 0.35    0.153846154 0.635002306 0.612372436

Edit2:这就是我的 tabletab 现在的样子:

    > tabletab1[1:3,]
                                               name         A          B
  1     xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_- 0.2427184 0.35483871
  2     xxx_NODE_22738_yyy_415_zzz_2.453012_1_455_+ 0.1523179 0.18750000
  3     xxx_NODE_52133_yyy_348_zzz_3.123563_1_388_- 0.1240310 0.06666667
            C         D         E         F         G         H         I
  1 0.1666667 0.2000000 0.3689320 0.4516129 0.3333333 0.4186047 0.3333333
  2 0.2142857 0.1208791 0.2317881 0.2500000 0.4642857 0.3500000 0.1538462
  3 0.1000000 0.1518987 0.2403101 0.1333333 0.3000000 0.2000000 0.2658228
            J         K
  1 0.7631093 0.7111422
  2 0.6350023 0.6123724
  3 0.7236342 0.5617433

>   tablecsv1[1:3,]
                                             name         A          B
1     xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_- 0.2427184 0.35483871
2     xxx_NODE_22738_yyy_415_zzz_2.453012_1_455_+ 0.1523179 0.18750000
3     xxx_NODE_52133_yyy_348_zzz_3.123563_1_388_- 0.1240310 0.06666667
          C         D         E         F         G         H         I
1 0.1666667 0.2000000 0.3689320 0.4516129 0.3333333 0.4186047 0.3333333
2 0.2142857 0.1208791 0.2317881 0.2500000 0.4642857 0.3500000 0.1538462
3 0.1000000 0.1518987 0.2403101 0.1333333 0.3000000 0.2000000 0.2658228
          J         K
1 0.7631093 0.7111422
2 0.6350023 0.6123724
3 0.7236342 0.5617433

现在好像还好。然而,这些来自我用 excel 重新保存的输入文件,在我稍微模糊了样本名称之后。原始文件产生的结果如下所示:

tabletab1[1:3,] name A xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_- 0.2427184 0.35483871 xxx_NODE_22738_yyy_415_zzz_2.453012_1_455_+ 0.1523179 0.18750000 xxx_NODE_52133_yyy_348_zzz_3.123563_1_388_- 0.1240310 0.06666667 B xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_- 0.1666667 xxx_NODE_22738_yyy_415_zzz_2.453012_1_455_+ 0.2142857 xxx_NODE_52133_yyy_348_zzz_3.123563_1_388_- 0.1000000 C xxx_NODE_25653_yyy_272_zzz_2.529412_1_312_- 0.2000000 xxx_NODE_22738_yyy_415_zzz_2 .453012_1_455_+ 0.1208791 xxx_NODE_52133_yyy_348_zzz_3.123563_1_388_- 0.1518987

因此,“名称”列包含在所有其他列中。包含的这些文件是使用在 unix 下运行的 java 程序生成的,该程序似乎使用其他元字符来表示“\t”和“\n”(在文本编辑器中看不到这个)所以问题解决了,我猜,但是因为我在unix机器上运行java程序,如果在windows操作系统上使用Excel重新保存表格后发现表格工作得更好,并且在unix机器上也运行R?此外,当我在任何表上运行 Dos2Unix 时,它们会再次获得这些元字符,从而导致这些问题。

4

0 回答 0