首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为行中的每个唯一值连接列中的所有元素。

为行中的每个唯一值连接列中的所有元素。
EN

Stack Overflow用户
提问于 2017-10-12 18:11:28
回答 3查看 121关注 0票数 1

我希望将所有fast1和fast2文件连接起来,用于Sam_1中的每个唯一值。

如: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

代码语言:javascript
复制
 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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-12 19:20:45

我使用tapplypaste生成命令:

代码语言:javascript
复制
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" 

然后,可以使用使用system的for循环来执行每个命令(lapply(r1, system))。

我将继续使用fast2列执行类似的步骤,或者将上面的内容转换成一个很好的函数来完成这两种操作,作为读者的练习。

使用这些数据:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2017-10-12 18:43:12

您也可以用dplyr + tidyr来尝试这一点。

代码语言:javascript
复制
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)

命令:

代码语言:javascript
复制
[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"

数据:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-10-12 19:43:33

你可以一举做到这一点

代码语言:javascript
复制
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.fastqL1-B_1.fastq等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46716286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档