2013-02-26 73 views
0

我收集了一年兩次對幾所學校的學生進行評分的州考的數據。一些學校派他們的學生在今年的第一學期參加考試,而另一些學校則在第二學期進行考試。保留/刪除符合特定條件的數據行

我有每個學校的分數總和,但我需要消除過去6年未提交過測試的學校。

換句話說,我需要一個代碼來消除在過去的6年中一整年沒有出現在測試中的行(學校)(這兩個學期都有NA值)。

我有超過20萬的觀察,我還沒有能夠成功地消除學校。

的數據幀被安排如下(例如)

School_Code  Score_2000.1  Score_2000.2  Score_2001.1  Score_2001.2  Score_2002.1  Score_2002.2  Score_2003.1  Score_2004.2  Score_2005.1  Score_2005.2  Score_2006.1  Score_2006.2  Score_2007.1  Score_2007.2  Score_2008.1  Score_2008.2  Score_2009.1  Score_2009.2  Score_2010.1  Score_2010.2  Score_2011.1  Score_2011.2  Score_2012.1  Score_2012.2 
      1    NA    NA    243552    NA    234566    NA   726432    NA     NA    NA    457246    NA   741362    NA    243552    NA    234566    NA    764332    NA    234566    NA    76432    NA 
      2    NA    978304    NA    263760    NA    152853   NA    426483    NA    753651    NA    980412   NA    147258    NA    567123    NA    876543    NA    148234    NA    126745    NA    123456  
      3    NA    324654    NA    264660    NA    152753   NA    876521    NA    653211    NA    998232   NA    148766    NA    236421    NA    543921    NA    765134    NA    129805    NA    125600  
      4    NA    NA    425682    NA    645686    NA   328765    NA    861452    NA    276567    NA    NA     NA    529805    NA    NA    123876    327626    998232   NA    148766   726432    NA 
     .     .    .     .    .     .     .     .     .     .    .     .    .     .     .     .     .     .    .     .    .     .     .     .     . 
     .     .    .     .    .     .     .     .     .     .    .     .    .     .     .     .     .     .    .     .    .     .     .     .     . 
     .     .    .     .    .     .     .     .     .     .    .     .    .     .     .     .     .     .    .     .    .     .     .     .     . 
      n    876521    NA    425682    NA    645686    NA   328765    NA    861452    NA    276567    NA   142327    NA    529805    NA    643185    NA    327626 

在例如該特定情況下,校數4應當從樣品消除,因爲在2007年它沒有發送任何學生參加狀態測試。但是,儘管2005年沒有發送任何學生,但是學校號碼1應該保留,但它至少在2006年至2012年間發送過學生一次。

這就是我想要達到的,但仍然沒有運氣它。

回答

1

如何:

schools <- df(...) 
schools.ok <- schools[apply(schools[,seq(from = ncol(schools) - 11, to = ncol(schools))], 1, function(x) !(sum(is.na(x)) >= 7)),] 
+0

它仍然給所有4行。 – Arun 2013-02-26 22:22:30

+0

它現在給出一個空的data.frame。 – Arun 2013-02-26 22:24:52

+0

回到所有4行。 :) – Arun 2013-02-26 22:26:14

1

像這樣的事情?

idx <- which(colSums(apply(df[,12:25], 1, 
      function(x) 
      apply(as.matrix(seq(1, 14, by=2)), 1, 
      function(y) all(is.na(x[y:(y+1)]))))) 
> 0) 

它給出了要刪除的行索引。你可以只是做:

df[setdiff(1:nrow(df), idx), ] 

如果你不希望指數,而只是直接過濾的結果,那麼,

df[!(colSums(apply(df[,12:25], 1, 
      function(x) 
      apply(as.matrix(seq(1, 14, by=2)), 1, 
      function(y) all(is.na(x[y:(y+1)]))))) 
> 0), ]