R语言 筛选具有相等值的列

eanckbw9  于 2023-10-13  发布在  其他
关注(0)|答案(3)|浏览(110)

我想过滤一个框架,如果至少有两列的df是相等的,但在一个动态的方式。
假设下面的dataframe:

data.frame(Var1 = c(1,1,1,2,3,4,4),Var2=c(1,2,6,8,2,5,4),Var3=c(1,3,5,6,7,5,6))
  Var1 Var2 Var3
1    1    1    1
2    1    2    3
3    1    6    5
4    2    8    6
5    3    2    7
6    4    5    5
7    4    4    6

我想保留根本不相等的值,所以如果至少有2列与行相等,它们将被删除。最终结果应为:

Var1 Var2 Var3
2    1    2    3
3    1    6    5
4    2    8    6
5    3    2    7

由于我的框架中的列数应该增加,如果它是动态的,受到mutate(across())语句的启发,那就更好了。
非常感谢

jmo0nnb3

jmo0nnb31#

library(tidyverse) 

df %>% 
  rowwise() %>% 
  filter(n_distinct(c_across()) > 2)

# A tibble: 4 × 3
# Rowwise: 
   Var1  Var2  Var3
  <dbl> <dbl> <dbl>
1     1     2     3
2     1     6     5
3     2     8     6
4     3     2     7
liwlm1x9

liwlm1x92#

使用dqr可以如下所示完成:

df |> dplyr::filter_all(dplyr::all_vars(. != dplyr::first(.)))
4xy9mtcn

4xy9mtcn3#

dplyr中,一种更新的方法是使用if_any

library(dplyr)
df %>% 
  filter(if_any(Var2:Var3, ~ .x != Var1))

您还可以使用collapse::varying来测试数据中的变化:

df[collapse::varying(t(df)), ]

相关问题