检查 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
我是这个社区的新手,希望能解决这个问题。
我有一个如下所示的数据框:
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