【问题标题】:Check if select columns have the same value检查选择列是否具有相同的值
【发布时间】:2021-12-29 18:14:15
【问题描述】:

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

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

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"))

我想检查 value1、value2、value3 和 value4 是否都相同。我可以让它与以下代码一起工作:

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

但是,我最终丢失了数据框中的 id1 和 id2 列。我如何通过保留 id1 和 id2 来解决这个问题。

【问题讨论】:

    标签: r dplyr data-wrangling


    【解决方案1】:

    mutate 中选择across 中的列时保留它们,而不是仅selecting 列

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多