从字符串中过滤一些字符

问题描述 投票:0回答:1

我正在尝试从一个大列表和包含 10 万行的数据集中过滤和组合一些个体。它们包含在名为“IndividualsObserved”的列中,并显示为一串字符,如下所示:

 IndividualsObserved 
 c("Azur";"Bleue";"Noir";"Azur","Bleue","Ivoire","Fitz","Gloria","Tyler")*

*还有更多的个体可以以不同的组合出现,但我只对下面详细介绍的那些感兴趣。

我想知道如何使用 dplyr 创建另一个列(带有 mutate),该列仅包含某些个体,例如:“Azur”、“Bleue”、“Ivoire”、“Fitz”、“Gloria” ”和“泰勒”。其余的可以忽略。我希望这个专栏被命名为“IndividualsFiltered”

这些人如下:

 IndividualsFiltered
 "Azur", "Bleue", "Ivoire", "Fitz", "Gloria", "Tyler"

(没有被选中的非常多,难道不是上面列出的其中之一,是不是没有指定,而是自动取消选中的?)

其次,我想创建两种类型的附加列,将两个个人(二元组)结合起来,并根据其团体成员资格的两个标准进行组合。

如果前三名属于A组(Azur、Bleue、Ivoire), 最后三人属于B组(Fitz、Gloria、Tyler)。

考虑到我想施加将上述个人纳入“已筛选个人”的条件,这将是为了: GroupA=(蔚蓝、蓝色、科特迪瓦),

  and for 

  GroupB=(Fitz, Gloria, Tyler).

以最后一个条目为例(将出现在新创建的个人中
过滤的个人为 c("Azur";"Bleue";"Ivoire","Fitz","Gloria","Tyler")

两个标准如下:

  1. 不同组的个体出现在属于同一组的两个个体的组中的单独的新列中。这些列将包含两个个体,可以命名为 Dyad1DifferentGroup、Dyad2SameGroup 等(取决于两个个体有多少种可能的组合)。 总共有 6 个对,每个都可以出现在以下列中。精确计算组(A 或 B)的二元数。

    对于 A 组,二元组将是: Dyad1GroupA ="蔚蓝";"蓝色" Dyad2GroupA ="蔚蓝";"象牙海岸" Dyad3GroupA ="蓝色";"象牙海岸"

    对于 B 组,二元组将是: Dyad1GroupB ="菲茨";"格洛丽亚" Dyad2GroupB =“菲茨”;“泰勒” Dyad3GroupB =“格洛丽亚”;“泰勒”

  2. 不同组的个体以两个个体为一组出现在单独的新列中。同样的逻辑适用于新列,在本例中,这些新列可以命名为 Dyad1GroupAB、Dyad2GroupAB 等。

    因此得到的二元组将是:
    Dyad1GroupAB 代表“Azur”;“Fitz” Dyad2GroupAB 代表“Azur”;“Gloria” Dyad3GroupAB 代表“Azur”;“Tyler” Dyad4GroupAB 代表“蓝色”;“菲茨” Dyad5GroupAB 代表“蓝色”;“格洛丽亚” Dyad6GroupAB 代表“蓝色”;“菲茨” Dyad7GroupAB 代表“科特迪瓦”;“菲茨” Dyad8GroupAB 代表“科特迪瓦”;“格洛丽亚” Dyad9GroupAB 代表“科特迪瓦”;“泰勒”

如果您对可能的方法有一些想法,非常感谢, 抱歉,如果我没有为之前收到的评论投票,但我还没有被允许(注册时间不够长)。

r string dplyr filter
1个回答
0
投票
df <- tibble(individuals = list(c("Azur","Bleue","Noir","Azur","Bleue","Ivoire","Fitz","Gloria","Tyler")))

certain_individuals <- c("Azur", "Bleue", "Ivoire", "Fitz", "Gloria", "Tyler")

dplyr::mutate(df, individuals = purrr::map(individuals, ~ .x[.x %in% certain_individuals]))

输出:

# A tibble: 1 × 1
  individuals
  <list>     
1 <chr [8]>  

我会将第二部分作为一个单独的问题。

© www.soinside.com 2019 - 2024. All rights reserved.