0

年に2回、いくつかの学校の生徒を評価する州のテストのデータを収集しました。一部の学校は、その年の最初の学期にテストを受けるために生徒を送りますが、他の学校は2番目の学期にそれらを送ります。

学校ごとのスコアの集計がありますが、過去6年間にテストを提示しなかった学校を削除する必要があります。

つまり、過去6年間に1年間(その年の両方の学期に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

たとえば、この特定のケースでは、2007年に州の試験を受けるために生徒を派遣しなかったため、学校番号4をサンプルから削除する必要があります。しかし、学校番号1は、2005年には生徒を派遣しなかったものの、2006年から2012年に少なくとも1回は生徒を派遣したため、維持する必要があります。

これは私が達成しようとしていることですが、それでも運がありません。

4

2 に答える 2

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), ]
于 2013-02-26T22:21:47.980 に答える
1

どうですか:

schools <- df(...)
schools.ok <- schools[apply(schools[,seq(from = ncol(schools) - 11, to = ncol(schools))], 1, function(x) !(sum(is.na(x)) >= 7)),]
于 2013-02-26T22:15:37.757 に答える