gpt4 book ai didi

r - 如何使用R中的for循环将列保存到单个文件中

转载 作者:行者123 更新时间:2023-12-04 10:56:10 24 4
gpt4 key购买 nike

我有一个包含 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)
}

但我收到如下错误:

Error in $<-.data.frame(*tmp*, "i", value = c(1, 2, 4)) : replacement has 3 rows, data has 0



我哪里出错了?

最佳答案

我们可以使用 lapplyfwrite .根据显示的数据,似乎是data.table

library(data.table)
setDT(log_trans2)
lapply(names(log_trans2)[3:ncol(log_trans2)], function(nm) {
d1 <- log_trans2[, c(names(log_trans2)[1:2], nm), with = FALSE]
d1 <- merge(d1, OTUNames, by.x="otu2", by.y="OTUId")
d1 <- merge(d1, OTUNames, by.x="otu1", by.y="OTUId")
fwrite(d1, file = paste0("patients_", nm, ".txt"))})
fwrite 的输入将是
lapply(names(log_trans2)[3:ncol(log_trans2)], function(nm) 
log_trans2[, c(names(log_trans2)[1:2], nm), with = FALSE])
#[[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

#[[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

#[[3]]
# otu1 otu2 3
#1: OTU_1 OTU_10 3.972693
#2: OTU_1 OTU_100 0.000000
#3: OTU_1 OTU_101 0.000000

数据
log_trans2 <- structure(list(otu1 = c("OTU_1", "OTU_1", "OTU_1"), otu2 = c("OTU_10", 
"OTU_100", "OTU_101"), `1` = c(3.807355, -1.61891, 0), `2` = c(5.403722,
0, 0), `3` = c(3.972693, 0, 0)), class = "data.frame", row.names = c("1:",
"2:", "3:"))

关于r - 如何使用R中的for循环将列保存到单个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59179015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com