gpt4 book ai didi

r - 检查非唯一字符的字符串模式

转载 作者:行者123 更新时间:2023-12-03 18:36:40 25 4
gpt4 key购买 nike

我有一个包含两列的数据框: idgradelist
gradelist 列中的值包括不同长度的等级列表(由 ; 分隔)。

这是数据:

id <- seq(1,7)
gradelist <- c("a;b;b",
"c;c",
"d;d;d;f",
"f;f;f;f;f;f",
"a;a;a;a",
"f;b;b;b;b;b;b;b",
"c;c;d;d;a;a")

df <- data.frame(id, gradelist)
df$gradelist <- as.character(df$gradelist)

我需要添加另一个 cloumn 来检查所有成绩是否都是每个 id 的 smae。

输出将如下所示:

enter image description here

最佳答案

我们可以提取字符并使用 n_distinct 进行检查以发现不同元素的数量为 1

library(dplyr)
library(purrr)
df %>%
mutate(same = map_chr(str_extract_all(gradelist, "[a-z]"),
~ c("no", "yes")[1+(n_distinct(.x)==1)]))
# id gradelist same
#1 1 a;b;b no
#2 2 c;c yes
#3 3 d;d;d;f no
#4 4 f;f;f;f;f;f yes
#5 5 a;a;a;a yes
#6 6 f;b;b;b;b;b;b;b no
#7 7 c;c;d;d;a;a no

或者使用 case_when
df %>% 
mutate(same = map_chr(str_extract_all(gradelist, "[a-z]"), ~
case_when(n_distinct(.x) == 1 ~ "yes", TRUE ~ "no")))

或者另一个选项是 'gradelist' 上的 separate_rows 来扩展数据,找到 n_distinct
library(tidyr)
df %>%
separate_rows(gradelist) %>%
distinct %>%
group_by(id) %>%
summarise(same = c("no", "yes")[1 + (n_distinct(gradelist) == 1)]) %>%
left_join(df)

关于r - 检查非唯一字符的字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60676728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com