2010-09-06 65 views
0

一個數據幀我有以下數據幀(df過濾中的R

start  end 
1 14379 32094 
2 151884 174367 
3 438422 449382 
4 618123 621256 
5 698271 714321 
6 973394 975857 
7 980508 982372 
8 994539 994661 
9 1055151 1058824 
. .  . 
. .  . 
. .  . 

並與布爾值(vec)長的布爾矢量。

我想過濾掉df中的所有範圍,其中包含vec中相應位置中的至少一個TRUE值。

換句話說,將會輸出一行start=xend=y iff !any(vec[x:y])

關於如何完成這一任何想法?

+0

的[在R添加一列一個數據幀]可能重複(http://stackoverflow.com/questions/36516 51 /添加一列到一個數據幀在r) – hadley 2010-09-06 18:27:14

+0

@hadley這是如何重複?我使用了相同的數據框,但問題不同(過濾數據框與添加列到數據框)。 – 2010-09-07 06:50:34

回答

5

這是同一個問題: Adding a column to a dataframe in R 因此它具有相同的答案...使用應用,但隨着meanany,而不是...

> ranges <- apply(DF,1,function(row) !any(vec[ row[1]:row[2] ])) 
> DF[ranges,] 
2

我讀過你關於這個其他職位話題,如果你想與plyr實現這一目標, 試試這個:

new.df <- adply(df, .margins=1, function(x){if(!any(vec[x$start:x$end])) return(x)}) 
+0

+1謝謝你介紹'adply' – 2010-09-07 07:05:29