过滤数据帧并对r中的多个列应用截止

过滤数据帧并对r中的多个列应用截止,r,filter,dplyr,multiple-columns,logical-operators,R,Filter,Dplyr,Multiple Columns,Logical Operators,我有一个数据框,如下所示: [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] A 4 NA NA 1.55 4 NA [2,] B NA NA 4 0.56 NA NA [3,] C 4 4 NA 0.62 4 4 [4,] D NA NA NA 1.61 4 NA [5,]

我有一个数据框,如下所示:

      [,1]  [,2] [,3]  [,4]  [,5]  [,6]  [,7]

[1,]    A    4    NA    NA   1.55   4     NA

[2,]    B    NA   NA    4    0.56   NA    NA

[3,]    C    4    4     NA   0.62   4     4

[4,]    D    NA   NA    NA   1.61   4     NA

[5,]    E    4    NA    NA    0.5   4     NA
过滤后我希望得到的输出是:

       [,1]  [,2]  [,3]  [,4]  [,5]  [,6] [,7]


   [3,]  C     4     4    NA   0.62    4    4


   [5,]  E     4     NA   NA    0.5    4    NA
我希望在第2列到第4列中至少有一个值等于4,在第6列到第7列中至少有一个值等于4

我想使用下面的命令,但我不确定如何以正确的方式使用它,从而获得正确的输出

命令如下:

 new.df <- df %>% 
 dplyr::filter_at((vars(c(2:4)), any_vars(.  == 4) & vars(c(6:7)), any_vars(. == 4))
new.df%
dplyr::在((变量(c(2:4))、任意变量(.==4)和变量(c(6:7))、任意变量(.==4))处进行筛选
你知道我怎样才能得到想要的新的.df吗?
谢谢!

我不确定这有什么问题,除非它对您来说太冗长了,而且您希望有一种不命名列的方法

df = data.frame(col1 = c("A", "B", "C", "D", "E"), 
                col2 = c(4, NA, 4, NA, 4), 
                col3 = c(NA, NA, 4, NA, NA), 
                col4 = c(NA, 4, NA, NA, NA), 
                col5 = c(1.55, 0.56, 0.62, 1.61, 0.5 ), 
                col6 = c(4, NA, 4, 4, 4), 
                col7 = c(NA, NA, 4, NA, NA))

df %>% filter((col2 == 4| col3 == 4 | col4 == 4) & (col6 == 4 | col7 == 4))
产生:

    col1 col2 col3 col4 col5 col6 col7
1    A    4   NA   NA 1.55    4   NA
2    C    4    4   NA 0.62    4    4
3    E    4   NA   NA 0.50    4   NA

在base R中,您可以执行以下操作:

 df[rowSums(df[2:4]==4,T)>0 & rowSums(df[6:7]==4,T)>0,]
  col1 col2 col3 col4 col5 col6 col7
1    A    4   NA   NA 1.55    4   NA
3    C    4    4   NA 0.62    4    4
5    E    4   NA   NA 0.50    4   NA

由于您格式化示例数据帧的方式,无法将其复制到R中进行处理。这使得我们很难尝试解决您的问题。请使用
dput
制作一个版本,我们可以将其直接放入R中。查看更多信息