我想连接Sam_1中每个唯一值的所有fast1和fast2文件。
例如cat SRR3493476_1.fastq SRR3493477_1.fastq SRR3493475_1.fastq > L1-A_1.fastq
cat SRR3493476_2.fastq SRR3493477_2.fastq SRR3493475_2.fastq > L1-A_2.fastq
Run_s Sam_1 fast1 fast2
SRR3493476 L1-A SRR3493476_1.fastq SRR3493476_2.fastq
SRR3493477 L1-A SRR3493477_1.fastq SRR3493477_2.fastq
SRR3493475 L1-A SRR3493475_1.fastq SRR3493475_2.fastq
SRR3493483 L1-B SRR3493483_1.fastq SRR3493483_2.fastq
SRR3493481 L1-B SRR3493481_1.fastq SRR3493481_2.fastq
SRR3493482 L1-B SRR3493482_1.fastq SRR3493482_2.fastq
SRR3493487 L1-C SRR3493487_1.fastq SRR3493487_2.fastq
SRR3493484 L1-C SRR3493484_1.fastq SRR3493484_2.fastq
SRR3493485 L1-C SRR3493485_1.fastq SRR3493485_2.fastq
SRR3493486 L1-D SRR3493486_1.fastq SRR3493486_2.fastq
SRR3493478 L1-D SRR3493478_1.fastq SRR3493478_2.fastq
SRR3493479 L1-D SRR3493479_1.fastq SRR3493479_2.fastq
答案 0 :(得分:1)
您也可以使用tidyr
+ library(dplyr)
library(tidyr)
df %>%
gather(variable, value, fast1:fast2) %>%
mutate(variable = sub("(fast)(\\d)", "\\2.\\1q", variable)) %>%
unite(Sam_1, c("Sam_1", "variable"), sep = "_") %>%
group_by(Sam_1) %>%
summarize(value = paste(value, collapse = " ")) %>%
with(paste("cat", value, ">", Sam_1)) %>%
sapply(system)
[1] "cat SRR3493476_1.fastq SRR3493477_1.fastq SRR3493475_1.fastq > L1-A_1.fastq"
[2] "cat SRR3493476_2.fastq SRR3493477_2.fastq SRR3493475_2.fastq > L1-A_2.fastq"
[3] "cat SRR3493483_1.fastq SRR3493481_1.fastq SRR3493482_1.fastq > L1-B_1.fastq"
[4] "cat SRR3493483_2.fastq SRR3493481_2.fastq SRR3493482_2.fastq > L1-B_2.fastq"
[5] "cat SRR3493487_1.fastq SRR3493484_1.fastq SRR3493485_1.fastq > L1-C_1.fastq"
[6] "cat SRR3493487_2.fastq SRR3493484_2.fastq SRR3493485_2.fastq > L1-C_2.fastq"
[7] "cat SRR3493486_1.fastq SRR3493478_1.fastq SRR3493479_1.fastq > L1-D_1.fastq"
[8] "cat SRR3493486_2.fastq SRR3493478_2.fastq SRR3493479_2.fastq > L1-D_2.fastq"
<强>命令:强>
df = read.table(text = " Run_s Sam_1 fast1 fast2
SRR3493476 L1-A SRR3493476_1.fastq SRR3493476_2.fastq
SRR3493477 L1-A SRR3493477_1.fastq SRR3493477_2.fastq
SRR3493475 L1-A SRR3493475_1.fastq SRR3493475_2.fastq
SRR3493483 L1-B SRR3493483_1.fastq SRR3493483_2.fastq
SRR3493481 L1-B SRR3493481_1.fastq SRR3493481_2.fastq
SRR3493482 L1-B SRR3493482_1.fastq SRR3493482_2.fastq
SRR3493487 L1-C SRR3493487_1.fastq SRR3493487_2.fastq
SRR3493484 L1-C SRR3493484_1.fastq SRR3493484_2.fastq
SRR3493485 L1-C SRR3493485_1.fastq SRR3493485_2.fastq
SRR3493486 L1-D SRR3493486_1.fastq SRR3493486_2.fastq
SRR3493478 L1-D SRR3493478_1.fastq SRR3493478_2.fastq
SRR3493479 L1-D SRR3493479_1.fastq SRR3493479_2.fastq", header = TRUE, stringsAsFactors = FALSE)
数据:强>
{{1}}
答案 1 :(得分:1)
我会使用tapply
和paste
来生成命令:
r1 = with(dd, tapply(fast1, Sam_1, paste, collapse = " "))
for (i in seq_along(r1)) {
r1[[i]] = sprintf("cat %s > %s.fastq", r1[[i]], names(r1)[i])
}
r1
# L1-A
# "cat SRR3493476_1.fastq SRR3493477_1.fastq SRR3493475_1.fastq > L1-A.fastq"
# L1-B
# "cat SRR3493483_1.fastq SRR3493481_1.fastq SRR3493482_1.fastq > L1-B.fastq"
# L1-C
# "cat SRR3493487_1.fastq SRR3493484_1.fastq SRR3493485_1.fastq > L1-C.fastq"
# L1-D
# "cat SRR3493486_1.fastq SRR3493478_1.fastq SRR3493479_1.fastq > L1-D.fastq"
然后,您可以使用for system
循环来执行每个命令(lapply(r1, system)
)。
我会在fast2
列中执行类似的步骤,或者将上面的内容转换成一个很好的函数来执行这两个操作,作为读者的练习。
使用此数据:
dd = read.table(text = " Run_s Sam_1 fast1 fast2
SRR3493476 L1-A SRR3493476_1.fastq SRR3493476_2.fastq
SRR3493477 L1-A SRR3493477_1.fastq SRR3493477_2.fastq
SRR3493475 L1-A SRR3493475_1.fastq SRR3493475_2.fastq
SRR3493483 L1-B SRR3493483_1.fastq SRR3493483_2.fastq
SRR3493481 L1-B SRR3493481_1.fastq SRR3493481_2.fastq
SRR3493482 L1-B SRR3493482_1.fastq SRR3493482_2.fastq
SRR3493487 L1-C SRR3493487_1.fastq SRR3493487_2.fastq
SRR3493484 L1-C SRR3493484_1.fastq SRR3493484_2.fastq
SRR3493485 L1-C SRR3493485_1.fastq SRR3493485_2.fastq
SRR3493486 L1-D SRR3493486_1.fastq SRR3493486_2.fastq
SRR3493478 L1-D SRR3493478_1.fastq SRR3493478_2.fastq
SRR3493479 L1-D SRR3493479_1.fastq SRR3493479_2.fastq", header = T)
答案 2 :(得分:1)
你可以像这样做一切
data <- read.table(text="Run_s Sam_1 fast1 fast2
SRR3493476 L1-A SRR3493476_1.fastq SRR3493476_2.fastq
SRR3493477 L1-A SRR3493477_1.fastq SRR3493477_2.fastq
SRR3493475 L1-A SRR3493475_1.fastq SRR3493475_2.fastq
SRR3493483 L1-B SRR3493483_1.fastq SRR3493483_2.fastq
SRR3493481 L1-B SRR3493481_1.fastq SRR3493481_2.fastq
SRR3493482 L1-B SRR3493482_1.fastq SRR3493482_2.fastq
SRR3493487 L1-C SRR3493487_1.fastq SRR3493487_2.fastq
SRR3493484 L1-C SRR3493484_1.fastq SRR3493484_2.fastq
SRR3493485 L1-C SRR3493485_1.fastq SRR3493485_2.fastq
SRR3493486 L1-D SRR3493486_1.fastq SRR3493486_2.fastq
SRR3493478 L1-D SRR3493478_1.fastq SRR3493478_2.fastq
SRR3493479 L1-D SRR3493479_1.fastq SRR3493479_2.fastq",
header=TRUE, stringsAsFactors=FALSE)
groups1 <- by(data$fast1, data$Sam_1, as.character)
groups2 <- by(data$fast2, data$Sam_1, as.character)
groups <- c(groups1, groups2)
fnames <- paste0(names(groups), "_", rep(1:2, each=length(unique(data$Sam_1))))
names(groups) <- fnames
for (i in 1:length(groups)) {
file <- shQuote(paste0(fnames[i], ".fastq"))
system(paste("cat", paste(groups[[i]], collapse=" "), ">", file))
}
文件名将为L1-A_1.fastq
,L1-B_1.fastq
等。