检查 select 列是否具有相同的值

Check if select columns have the same value

我是这个社区的新手,希望能解决这个问题。

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

df <- data.frame(id=c(1,2,3,4),id2=c("x","y","z","a"),value1=c(1,2,3,4),value2=c(1,2,3,4),value3=c(1,1,3,4),value4=c(1,2,3,4),value5=c(1,2,3,"ab"))

我想检查值 1、值 2、值 3 和值 4 是否都相同。我可以使用以下代码使其工作:

comp4 <- df[,3:7] %>%
rowwise %>%
mutate(same =n_distinct(unlist(cur_data())) == 1) %>%
ungroup

但是,我最终丢失了数据框中的 id1 和 id2 列。如何通过保留 id1 和 id2.

来解决这个问题

不要只 select 列,而是在 mutate

中选择 across 中的列时保留它们
library(dplyr)
df %>% 
   rowwise %>% 
   mutate(same = n_distinct(unlist(across(starts_with('value'), 
        ~ as.character(.x)))) == 1) %>%
   ungroup

-输出

# A tibble: 4 × 8
     id id2   value1 value2 value3 value4 value5 same 
  <dbl> <chr>  <dbl>  <dbl>  <dbl>  <dbl> <chr>  <lgl>
1     1 x          1      1      1      1 1      TRUE 
2     2 y          2      2      1      2 2      FALSE
3     3 z          3      3      3      3 3      TRUE 
4     4 a          4      4      4      4 ab     FALSE

或者也可以使用if_all

df %>% 
   mutate(same = if_all(value2:value5, ~ .== value1))
  id id2 value1 value2 value3 value4 value5  same
1  1   x      1      1      1      1      1  TRUE
2  2   y      2      2      1      2      2 FALSE
3  3   z      3      3      3      3      3  TRUE
4  4   a      4      4      4      4     ab FALSE