R语言 如何分组和合并数据

von4xj4u  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(192)

无法合并数据框中的行。
我有这样的输入:

element tool time    disease
    AAK1   SE   12       SARS
    AAK1   RI   12       SARS
    AAK1 A5SS   12       SARS
    AAK1   SE   12       MERS
    AAK1   RI   12       MERS
    AAK1  MXE   12       MERS
   ABCC1   SE   12 SARS-CoV-2
   ABCC1  MXE   12 SARS-CoV-2
  ABCC10   SE   12       MERS
  ABCC10   A3SS 12       MERS

我想要这样的输出:

element  time    disease                  SE   RI    MXE   A3SS  A5SS
AAK1       12    SARS and MERS             1     1     0     0     0
AAK1       12    SARS                      0     0     0     0     1
AAK1       12    MERS                      0     0     1     0     0
ABCC1      12    SARS-CoV-2                1     0     1     0     0
ABCC10     12    MERS                      1     0     0     1     0

我希望函数做的是,第一个group_by元素,你会得到这个:

element tool time    disease
AAK1   SE   12       SARS
AAK1   RI   12       SARS
AAK1 A5SS   12       SARS
AAK1   SE   12       MERS
AAK1  MXE   12       MERS
AAK1   RI   12       MERS
  • 将工具列拆分为5列,

SE RI MXE A3SS A5SS

  • 使用SE RI MXE A3SS A5SS检查是否可以合并疾病列。

在这个例子中,只有SE和RI可以合并,因为它们同时存在于SARS和MERS(疾病列)中,不能合并的观察结果,请单独填写。

element  time    disease                     SE   RI    MXE   A3SS  A5SS
AAK1      12    SARS and MERS                1     1     0     0     0
AAK1      12    SARS                         0     0     0     0     1
AAK1      12    MERS                         0     0     1     0     0

以这种方式在每个元素上运行循环,并给予一个dataframe作为输出,这是我上面提到的。

wecizke3

wecizke31#

您可以将summarizepaste中的collapse一起使用,以将共享elementtooltime的疾病粘在一起。然后pivot_wider展开列,tool列中的length作为填充参数(缺失值也用零填充)。

library(tidyverse)

df |> 
  group_by(element, tool, time) |> 
  summarize(disease = paste0(sort(disease), collapse = " and ")) |> 
  pivot_wider(names_from = tool, values_from = tool, values_fn = length, values_fill = 0) |> 
  ungroup()

# A tibble: 5 × 8
  element  time disease        A5SS   MXE    RI    SE  A3SS
  <chr>   <int> <chr>         <int> <int> <int> <int> <int>
1 AAK1       12 SARS              1     0     0     0     0
2 AAK1       12 MERS              0     1     0     0     0
3 AAK1       12 SARS and MERS     0     0     1     1     0
4 ABCC1      12 SARS-CoV-2        0     1     0     1     0
5 ABCC10     12 MERS              0     0     0     1     1

相关问题