【问题标题】:intersecting elements after grouping by a variable按变量分组后的相交元素
【发布时间】:2021-12-05 20:38:30
【问题描述】:

我的数据如下所示:

toy.dat <- data.frame(group = c(rep("A_0", 3), rep("A_1", 2), 
                                rep("B_0", 3) , rep("B_1", 3)))
toy.dat$letters <- c("A", 'B', "C", "A", "D", "C", "E", "F", "A", "B", "F")

toy.dat %>% 
  group_by(group) %>% 
  summarise(letters = list(letters), num = n()) %>%
  mutate(group_number = gsub(".*_", "", group))


group   letters            num_elements  group_num   
A_0     c("A", "B", "C")       3              0        
A_1     c("A", "D")            2              1
B_0     c("C", "E", "F")       3              0
B_1     c("A", "B", "F")       3              1

我想按 group_numb 分组并找到这些行的字母的交集并将它们添加到数据框中。

输出应为 A_0 和 B_0 提供“c”,为 A_1 和 B_1 提供“A”。

【问题讨论】:

    标签: r list dplyr group-by intersect


    【解决方案1】:

    我们可能会使用reduce

    library(dplyr)
    library(purrr)
    toy.dat %>% group_by(group) %>% summarise(letters = list(letters), num = n()) %>%
    mutate(group_number = gsub(".*_", "", group)) %>% group_by(group_number) %>% mutate(intersect = list(reduce(letters, intersect))) %>%
     ungroup %>%
       mutate(nintersect = lengths(intersect))
    

    -输出

    # A tibble: 4 × 6
      group letters     num group_number intersect nintersect
      <chr> <list>    <int> <chr>        <list>         <int>
    1 A_0   <chr [3]>     3 0            <chr [1]>          1
    2 A_1   <chr [2]>     2 1            <chr [1]>          1
    3 B_0   <chr [3]>     3 0            <chr [1]>          1
    4 B_1   <chr [3]>     3 1            <chr [1]>          1
    

    【讨论】:

    • 谢谢,这似乎适用于我的玩具数据。但是对于我的真实数据集,这个错误正在弹出:错误:mutate()intersect 有问题。 ℹintersect = reduce(genes, intersect)。 ℹ intersect 的大小必须是 5 或 1,而不是 27。ℹ 第 1 组出现错误:cluster_num = "0"。
    • @say.ff 可能你没有一个以上的元素作为相交,只需将它包装在一个列表中,它应该可以解决
    • 查看更新后的帖子
    • 是的,它正在工作。我还需要添加一个计算交叉点数的列。我怎样才能添加它
    • 抱歉。我只是忘了这样做。我投票给了答案,非常感谢你
    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多