【发布时间】:2020-03-29 10:23:04
【问题描述】:
我有一个包含 143 列和 147153 行的数据框,如下所示:(我的数据的子集)
otu1 otu2 1 2 3
1: OTU_1 OTU_10 3.807355 5.403722 3.972693
2: OTU_1 OTU_100 -1.618910 0.000000 0.000000
3: OTU_1 OTU_101 0.000000 0.000000 0.000000
现在我需要 1 列和 2 列以及后续列在单独的文件中。 期望的输出将是:
文件 1:
otu1 otu2 1
1: OTU_1 OTU_10 3.807355
2: OTU_1 OTU_100 -1.618910
3: OTU_1 OTU_101 0.000000
4: OTU_1 OTU_1019 0.000000
5: OTU_1 OTU_102 0.000000
文件 2 等等....
otu1 otu2 2
1: OTU_1 OTU_10 5.403722
2: OTU_1 OTU_100 0.000000
3: OTU_1 OTU_101 0.000000
4: OTU_1 OTU_1019 9.211077
5: OTU_1 OTU_102 0.000000
所以,我尝试了以下代码:
for ( i in 1:141){
patient$i=log_trans2[,c(1:2,(i+2))]
patient$i=patient$i[patient$i!=0]
patient$i=merge(patient$i, OTUNames, by.x="otu2", by.y="OTUId")
patient$i=merge(patient$i, OTUNames, by.x="otu1", by.y="OTUId")
write.table(patient1$i, file=sprintf("patient_grahs/patient.%s.tab",i), sep = '\t',quote = FALSE)
}
但我收到如下错误:
$<-.data.frame(*tmp*, "i", value = c(1, 2, 4)) 中的错误: 替换有3行,数据有0
我哪里出错了?
【问题讨论】:
-
您最大的错误是不能将变量与
$一起使用。变量仅适用于[。您还需要注意patient[, 1]是您的第一列,而patient[, "1"]是您的第三列...使用编号的列名通常是个坏主意。 -
谢谢。我将列名更改为 Patient_1。 patient_2 等
-
目前还不清楚您要对这些合并调用做什么。什么是 OTUId?最好让你的问题集中在一个任务上——也许这个问题是关于写出文件,然后根据需要进入下一个任务
-
我还有一个包含两列(OTUId 和 OTUNames)的文件。 OTUid 与 otu1 和 otu2 具有相同的内容。所以我也需要获取 OTUNames
-
如果您需要我们帮助您处理的更多数据,您需要将其添加到问题中