首页 文章

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

提问于
浏览
0

我有一个数据框如下:

[,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吗?谢谢!

3 回答

  • 0

    在基地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
    
  • 1

    使用 dplyr 略有不同:

    df %>% 
    filter_at(vars(col2, col3, col4), any_vars(. == 4)) %>% 
      filter_at(vars(col6, col7), any_vars(. == 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
    

    列位置:

    df %>% 
    filter_at(c(2,3,4), any_vars(. == 4)) %>% 
      filter_at(c(6,7), any_vars(. == 4))
    
  • 1

    我不确定有什么问题,除非它对你来说太冗长,而你想要一种不命名列的方法 .

    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
    

相关问题