R 创建一个循环并粘贴
我的循环有问题。 我有一个数据框:R 创建一个循环并粘贴,r,loops,paste,R,Loops,Paste,我的循环有问题。 我有一个数据框: Transcript=c(1,1,1,1,2,2,2,2,2) Exon=rep(c(1:4,1:5)) S=c("aaa","ttt","ccc","ggg","ata","tat","cgc","gcg","bbb") E=c("AAA","TTT","CCC","GGG","ATA","TAT","CGC","GCG","BBB") DF=data.frame(Transcript, Exon, S, E) DF s=split( DF , DF$Tra
Transcript=c(1,1,1,1,2,2,2,2,2)
Exon=rep(c(1:4,1:5))
S=c("aaa","ttt","ccc","ggg","ata","tat","cgc","gcg","bbb")
E=c("AAA","TTT","CCC","GGG","ATA","TAT","CGC","GCG","BBB")
DF=data.frame(Transcript, Exon, S, E)
DF
s=split( DF , DF$Transcript,)
我想按转录本对数据帧进行子集划分,并将E列和S列粘贴在一起,以给出每个转录本中所有可能的组合。例如,对于转录本1,我想返回:
AAAAA、AAAttt、AAACC、AAAggg、TTTaaa、TTTttt、TTTccc、TTTggg、CCCaaa、CCCttt、CCCCCCC、CCCggg、GGGaaa、GGGttt、GGGccc、GGGGGGGG
我尝试了以下循环,但它只返回AAAaaa
AAAttt
AAAccc
AAAggg
:
for(i in 1:nrow(s[[1]])){p=paste(s[[1]][1,4],s[[1]][1:i,3],sep="")}
如何创建此循环?类似的方法可能会奏效:
lapply(s, function(df) apply(expand.grid(df$E, df$S),1,paste0,collapse=""))
或者,按照@akrun的建议
lapply(s, function(df) do.call(paste0, expand.grid(df$E, df$S)))
您可以尝试
data.table
library(data.table)
setDT(DF)[,Reduce(paste0,CJ(E, S)), by=Transcript]
数据
DF很好地使用expand.grid!您还可以执行lappy(s,函数(df)do.call(paste0,expand.grid(df$E,df$s))
DF <- data.frame(Transcript, Exon, S, E)