0

我对我的上一个问题有一个非常相似的疑问(将数据框转换为带有计数的矩阵)。同样,我的数据文件结构如下:

OTU1    PIA0    1120
OTU2    PIA1    2
OTU2    PIA3    6
OTU2    PIA4    10
OTU2    PIA5    1078
OTU2    PIN1    24
OTU2    PIN2    45
OTU2    PIN3    261
OTU2    PIN4    102
OTU3    PIA0    16
OTU3    PIA1    59
OTU3    PIA2    27
OTU3    PIA3    180
OTU3    PIA4    200
OTU3    PIA5    251
OTU3    PIN0    36
OTU3    PIN1    61
OTU3    PIN2    156
OTU3    PIN3    590
OTU3    PIN4    277
OTU4    PIA0    401
OTU4    PIN0    2

但现在我想创建一个结合三列计数的文件,或多或少像这样:

PIA0    1120    OTU1
PIA0    16    OTU3
PIA0    401    OTU4
PIA1    2    OTU2
PIA1    59    OTU3
PIA2    27    OTU3
PIA3    6    OTU2
PIA3    180    OTU3
PIA4    10    OTU2
PIA4    200    OTU3
PIA5    1078    OTU2
PIA5    251    OTU3
PIN0    36    OTU3
PIN0    2    OTU4
PIN1    24    OTU2
PIN1    61    OTU3
PIN2    45    OTU2
PIN2    156    OTU3
PIN3    261    OTU2
PIN3    590    OTU3
PIN4    102    OTU2
PIN4    277    OTU3

我的意思是,我需要做的是对数据进行新的排序,将第一列留给第二列的数据(现在看起来是有组织的),另外两列留给第三列的数据,最后是第一列的数据。

是否有可能再次使用 R 包“reshape2”来实现这一目标?也许使用“dcast”或“acast”?

目标是建立一个像示例中的第二个矩阵一样的矩阵,以便我可以使用这些数据运行PHYLOCOM 程序。

再次非常感谢!!!

4

1 回答 1

1
x <- read.table(textConnection("
OTU1    PIA0    1120
OTU2    PIA1    2
OTU2    PIA3    6
OTU2    PIA4    10
OTU2    PIA5    1078
OTU2    PIN1    24
OTU2    PIN2    45
OTU2    PIN3    261
OTU2    PIN4    102
OTU3    PIA0    16
OTU3    PIA1    59
OTU3    PIA2    27
OTU3    PIA3    180
OTU3    PIA4    200
OTU3    PIA5    251
OTU3    PIN0    36
OTU3    PIN1    61
OTU3    PIN2    156
OTU3    PIN3    590
OTU3    PIN4    277
OTU4    PIA0    401
OTU4    PIN0    2"))

y <- x[with(x, order(V2, V1)), c(2, 3, 1)]
head(y)
     V2   V3   V1
1  PIA0 1120 OTU1
10 PIA0   16 OTU3
21 PIA0  401 OTU4
2  PIA1    2 OTU2
11 PIA1   59 OTU3
12 PIA2   27 OTU3
于 2013-09-11T12:40:58.397 回答