我想知道如何使用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)
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)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |