如何从数据框中提取行(使用Loop)并将其保存在另一个数据框中

时间:2014-08-23 00:33:20

标签: r

我有2个文件(作为数据框),第一个三列的cossets可以说:

POS  Freq1  Freq2
23   0.5    0.45
48   0.7    0.55  
05   0.8    0.65

依旧......

第二个文件由2列组成:

Start  End
1      10
25     50
60     75

等等。 我需要做的是提取POS值为> = Start和< = End的第一行中的行;我想检查以下内容:

23 >=1 && <=10(错误)

23 >=25 && <=50(错误)

并继续检查开始和结束中的所有值,直到找到真正的

48 >= 1 && <=10(错误)

48 >=25 && <=50(TRUE)

停止检查其余部分

5 >=1 && <=10(TRUE)

停止检查其余部分

然后,所有给出true的POS值都应该存储在数据框中,其余的信息存储在文件1中:所以我最终得到的是这个(假设第一行的所有比较都是假的) )

POS  Freq1  Freq2
48   0.7    0.55 
5    0.8    0.65

我在R中尝试了以下内容:

Trial = NULL
for (i in 1:nrow(file1) {
   for (j in 1:nrow(file2){
     if (file1$POS[[i]] >= file2$Start[[j]] & file1$POS[[i]] <= file2$End[j])  
       Trial = c(Trial,file1[i, ]) 
     else stop("Check the file Trial")
  }
}
Trial 
## $POS
## [1] 48
## $Freq1
## [1] 0.7
## $Freq2
## [1] 0.55

这不是我追求的目标吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

尝试:

ddf = structure(list(POS = c(23L, 48L, 5L), Freq1 = c(0.5, 0.7, 0.8
), Freq2 = c(0.45, 0.55, 0.65)), .Names = c("POS", "Freq1", "Freq2"
), class = "data.frame", row.names = c(NA, -3L))

refdf = structure(list(Start = c(1L, 25L, 60L), End = c(10L, 50L, 75L
)), .Names = c("Start", "End"), class = "data.frame", row.names = c(NA, 
-3L))

ddf
#  POS Freq1 Freq2
#1  23   0.5  0.45
#2  48   0.7  0.55
#3   5   0.8  0.65

refdf
#  Start End
#1     1  10
#2    25  50
#3    60  75

outdf = data.frame(POS=numeric(), Freq1=numeric(), Freq2=numeric())
for(i in 1:nrow(ddf)) for(j in 1:nrow(refdf)){
      if(ddf[i,1]>refdf[j,1] &&  ddf[i,1]<refdf[j,2])
           {outdf[nrow(outdf)+1,] = ddf[i,]; next}
}
outdf
#  POS Freq1 Freq2
#2  48   0.7  0.55
#3   5   0.8  0.65