将数据帧/矩阵转换为不同的有组织矩阵

时间:2013-09-11 12:14:29

标签: r matrix parser-combinators reshape2 phylogeny

我对我的最后一个(Transform data frame into matrix with counts)有一个非常相似的疑问。同样,我的数据文件结构如下:

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 program

再次感谢!!!

1 个答案:

答案 0 :(得分: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