我对我的最后一个(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。
再次感谢!!!
答案 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