我有一个文件列表.我还有一个"名称"列表,我substr()从这些文件的实际文件名中获取.我想为列表中的每个文件添加一个新列.此列将包含"names"中相应元素,重复次数为文件中的行数.
例如:
df1 <- data.frame(x = 1:3, y=letters[1:3])
df2 <- data.frame(x = 4:6, y=letters[4:6])
filelist <- list(df1,df2)
ID <- c("1A","IB")
Run Code Online (Sandbox Code Playgroud)
伪代码
for( i in length(filelist)){
filelist[i]$SampleID <- rep(ID[i],nrow(filelist[i])
}
Run Code Online (Sandbox Code Playgroud)
//基本上在filelist的每个数据框中创建一个新列,并用重复的相应ID值填充该列
我的输出应该是这样的:
filelist[1] 应该:
x y SAmpleID
1 1 a 1A
2 2 b 1A
3 3 c 1A
Run Code Online (Sandbox Code Playgroud)
fileList[2]
x y SampleID
1 4 d IB
2 5 e IB
3 6 f IB
Run Code Online (Sandbox Code Playgroud)
等等.....
任何想法如何做到这一点.
df1 <- data.frame(Chr=1, Pos= c(100,200,300,400),stringsAsFactors=F)
df2 <- data.frame(Chr=1, PosStart= c(25,25,150,175,225,275,375),PosEnd= c(150,75,275,300,400,500,750),stringsAsFactors=F)
Run Code Online (Sandbox Code Playgroud)
我想比较Pos值df1,看看是否任何的落差PosStart和PosEnd的df2.对于超过1行的情况,这可能是真的df2.在输出中,我试图将其df1$Pos作为新列附加df2$CoPos; 每次条件成立.输出应该是这样的:
Chr PosStart PosEnd CoPos
1 25 150 100
1 150 275 200
1 175 300 200
1 225 400 300
1 275 500 300
1 375 750 400
Run Code Online (Sandbox Code Playgroud)
我做过类似的事情:
for(i in 1:length(df1$Pos)){
for(j in 1:length(df2$PosStart){
df2$CoPos[j]<- df1$Pos[which(df2$PosStart[j] < df1$Pos[i] < df2$PosEnd[j])]
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我,如果没有循环,有没有办法做到这一点.我在这里做错了什么?经过几个月的挣扎,我不认为我仍然理解循环的概念.
提前感谢一堆.
r ×2