使用for循环在数据集中添加新列

时间:2015-05-04 14:16:51

标签: r

我想在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)

0 个答案:

没有答案