如何使用 R 中的 dplyr 包在列中保留具有相同值的行?

rg4*_*g4s 6 r filter dplyr

我想知道如何使用dplyr包过滤列中具有相同值的行?我尝试做一些与这个问题中提出的要求相反的事情,但没有任何效果。

我使用了带有函数的方法apply,但收到以下错误:

same_vals <- apply(mydata, 1, function(x) all(x == x[1]))

final <- mydata %>% 
  filter(same_vals)


Error: Can't subset elements that don't exist.
x Location 1 doesn't exist.
i There are only 0 elements. 
Run Code Online (Sandbox Code Playgroud)

apply每次我尝试使用它时都会让我发疯。它对我的样本数据都不起作用:

set.seed(2022)
test <- tibble(id = floor(runif(10, min = 0, max = 111)),
       var1 = ceiling(runif(10, min = 5, max = 10)),
       var2 = c(6, 5, 4, 8, 12, 1223, 14, 1, 90, 1),
       var3 = c(6, 3, 4, 8, 11, 45, 56, 78, 0, 9))


# A tibble: 10 x 4
      id  var1  var2  var3
   <dbl> <dbl> <dbl> <dbl>
 1    90     6     6     6
 2    71     6     5     3
 3    13     6     4     4
 4    60     8     8     8
 5    20     9    12    11
 6    70     6  1223    45
 7     8     9    14    56
 8     4     8     1    78
 9    41     8    90     0
10    84    10     1     9

test1 <- apply(test, 1, function(x) all(x == x[1]))

test %>% 
  filter(test1)

# A tibble: 0 x 4
# ... with 4 variables: id <dbl>, var1 <dbl>, var2 <dbl>, var3 <dbl>
Run Code Online (Sandbox Code Playgroud)

理想的输出

# A tibble: 10 x 4
      id  var1  var2  var3
   <dbl> <dbl> <dbl> <dbl>
 1    90     6     6     6
 4    60     8     8     8
Run Code Online (Sandbox Code Playgroud)

Yur*_*kin 2

df <- data.frame(
          id = c(90, 71, 13, 60, 20, 70, 8, 4, 41, 84),
        var1 = c(6, 6, 6, 8, 9, 6, 9, 8, 8, 10),
        var2 = c(6, 5, 4, 8, 12, 1223, 14, 1, 90, 1),
        var3 = c(6, 3, 4, 8, 11, 45, 56, 78, 0, 9)
                  )

library(tidyverse)
df %>% 
  rowwise() %>% 
  filter(n_distinct(c_across(-id)) == 1) 
#> # A tibble: 2 x 4
#> # Rowwise: 
#>      id  var1  var2  var3
#>   <dbl> <dbl> <dbl> <dbl>
#> 1    90     6     6     6
#> 2    60     8     8     8
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2022 年 1 月 14 日创建(v2.0.1)