我想在data.frame中添加一个新列" ref"使用for循环,如果
ref$chr==seg$chr & ref$Start < seg$End & ref$End < seg$Start
。
新列应具有唯一(seg $ ID)
的colnames ref <- read.table(text="
Gene chr Start End
Gm12724 4 1000 1105
Gm12724 4 1254 1369
Usp17lc 7 5004 5412
Lingo1 7 5698 5789
Sart3 7 5987 6041
Olfr978 4 1452 1564
", header=T)
seg <- read.table(text="
ID chr Start End Xp
S8411 4 989 1258 0.312
S8411 4 1300 1800 0.144
S8411 7 5641 6874 0.136
S8413 4 1307 1360 -1.999
",header=T)
我为此使用了以下脚本,但最终得到了一个包含所有NAs的新列
#select unique ID from seg
tmp_id <- unique(seg$ID)
tmp.value <- rep(NA,nrow(ref))
for (i in 1:length(tmp_id)){
seg.tmp <- seg[which(seg$ID==tmp_id[i]),]
for(j in 1:nrow(ref)){
index <- which(ref$chr[j]==seg$chr &
ref$Start[j] < seg$End & ref$End[j] < seg$Start)
if(length(index)==1){
tmp.value[j] <- seg$seg.mean[index]
}
}
ref <- cbind(ref,tmp.value)
}
ref <- read.table("
Gene chr Start End S8411 S8413
Gm12724 4 1000 1105 0.312 NA
Gm12724 4 1294 1369 0.144 -1.999
Usp17lc 7 5004 5412 NA NA
Lingo1 7 5698 5789 0.136 NA
Sart3 7 5987 6041 0.136 NA
Olfr978 4 1452 1564 0.144 NA
",header=T)