使用R中的for循环过滤掉数据帧中的零

使用R中的for循环过滤掉数据帧中的零,r,for-loop,R,For Loop,在我的全局环境中有一组数据帧,每个数据帧有5列,我想过滤掉所有数据帧中仅在第4列和第5列中包含零的行。我尝试列出所有数据帧,并使用以下代码运行for循环: all_frames <- list(aa,bb,cc,dd,ee,ff,gg,hh,ii,jj) for (i in all_frames) { i <- i[apply(i[,-c(1:3)], 1, function(x) !all(x==0)),] } all_frames在base R中,可

在我的全局环境中有一组数据帧,每个数据帧有5列,我想过滤掉所有数据帧中仅在第4列和第5列中包含零的行。我尝试列出所有数据帧,并使用以下代码运行for循环:

all_frames <- list(aa,bb,cc,dd,ee,ff,gg,hh,ii,jj)

for (i in all_frames) {
  i <- i[apply(i[,-c(1:3)], 1, function(x) !all(x==0)),]
      
    }

all_frames在base R中,可以使用列名或列号
子集
。例如:

subset(mtcars, cyl == 4 & mpg < 25)
subset(mtcars, mtcars[, 2] == 4 & mtcars[, 1] < 25)

您是否可以更具体地说“仅在第4列和第5列中包含零”?您的代码与
!所有(x==0)
看起来像“过滤掉第4列和第5列都为0的行”,对吗?明白了,谢谢。所以我应该像@Gregor Thomas说的那样更清楚,我希望第4列和第5列都包含零的所有行都消失。在第4列和第5列都为零的情况下,编写子集或保留行的方式。我假设我会在某个地方放一个“!”来指定不是零。那会去哪里?好的,对不起,更正了,不用担心,有趣的是,这看起来更像是一个“或”语句,其中第4列或第5列中所有的行都被删除了。在我的数据中,有些行在第4列中有一个零,在第5列中有一个非零的数字,我想保留这些行,但这些行也被删除了。但我通过这样做得到了我想要的:子集(x,x[,5]>0)。谢谢
newdfs <- lapply(all_frames, function(x) subset(x, x[, 4] != 0 & x[, 5] != 0))