0

我收集了一项州测试的数据,该测试每年对几所学校的学生进行两次评分。一些学校在第一学期派学生参加考试,而另一些学校则在第二学期派学生参加考试。

我有每所学校的总成绩,但我需要排除过去 6 年未参加考试的学校。

换句话说,我需要一个代码来消除过去 6 年中整年没有出现在测试中的行(学校)(那一年的两个学期都有 NA 值)。

我有超过 200,000 次观察,但我无法成功消除学校。

数据帧排列如下(例如)

    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 年它没有派任何学生参加州考试。但是应该保留 1 号学校,因为即使它在 2005 年没有派出任何学生,但从 2006 年到 2012 年确实至少派出了一次学生。

这是我正在努力实现的目标,但仍然没有运气。

4

2 回答 2

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 回答
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 回答