ivot_wider() 为每个观察生成多行。重复问题?

T. *_*ams 2 r tidyr tidyverse

我无法将数据框转至每个观察集的一行中。数据框内嵌套有成对的观测值(Copy;Forward TemplateReverse Template ,值为primAccession。我正在尝试将数据透视更宽,在最终数据框中为每个配对观察留一行,我需要能够在总结时copy进行跟踪Accession

展望未来,我还想在每个副本中包含三个观察结果(未包含在本示例中)。

下面的代码为 的每个值生成一个单独的列prim

library(tibble)
library(dplyr)
library(tidyr)

df <- 
structure(list(prim = c("Template        601881  ....................  601900", 
"Template        601973  ......................  601952", "Template        331595  ....................  331614", 
"Template        331687  ......................  331666", "Template        196557  ....................  196576", 
"Template        196649  ......................  196628", "Template        153933  ....................  153952", 
"Template        154025  ......................  154004", "Template        2100939  ....................  2100920", 
"Template        2100847  ......................  2100868", "Template        11970  ....................  11989", 
"Template        12062  ......................  12041", "Template        2030677  ....................  2030658", 
"Template        2030585  ......................  2030606", "Template        1988028  ....................  1988009", 
"Template        1987936  ......................  1987957", "Template        1850917  ....................  1850898", 
"Template        1850825  ......................  1850846", "Template        1580702  ....................  1580683", 
"Template        1580610  ......................  1580631"), 
    Accession = c("CP042983.1", "CP042983.1", "CP042983.1", "CP042983.1", 
    "CP042983.1", "CP042983.1", "CP042983.1", "CP042983.1", "CP042983.1", 
    "CP042983.1", "CP043001.1", "CP043001.1", "CP043001.1", "CP043001.1", 
    "CP043001.1", "CP043001.1", "CP043001.1", "CP043001.1", "CP043001.1", 
    "CP043001.1"), Genus = c("Histophilus", "Histophilus", "Histophilus", 
    "Histophilus", "Histophilus", "Histophilus", "Histophilus", 
    "Histophilus", "Histophilus", "Histophilus", "Histophilus", 
    "Histophilus", "Histophilus", "Histophilus", "Histophilus", 
    "Histophilus", "Histophilus", "Histophilus", "Histophilus", 
    "Histophilus"), Species = c("somni", "somni", "somni", "somni", 
    "somni", "somni", "somni", "somni", "somni", "somni", "somni", 
    "somni", "somni", "somni", "somni", "somni", "somni", "somni", 
    "somni", "somni"), Metric = c("Forward Template", "Reverse Template", 
    "Forward Template", "Reverse Template", "Forward Template", 
    "Reverse Template", "Forward Template", "Reverse Template", 
    "Forward Template", "Reverse Template", "Forward Template", 
    "Reverse Template", "Forward Template", "Reverse Template", 
    "Forward Template", "Reverse Template", "Forward Template", 
    "Reverse Template", "Forward Template", "Reverse Template"
    )), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-20L))

tmp<- 
    df %>% 
    mutate(CopyID = rep(1:1000, each = 2)) %>% 
    group_by(Accession) %>% 
    mutate(AccessID = group_indices()) %>% 
    pivot_wider(names_from = Metric, values_from = prim)

tmp

Run Code Online (Sandbox Code Playgroud)

如何创建一个数据框,其中填充了Reverse TemplateForward Template列,并且每个观察仅创建一行?

干杯

Ron*_*hah 5

将数据分组为Metric

\n
library(dplyr)\n\ndf %>%\n  group_by(Metric) %>%\n  mutate(row = row_number()) %>%\n  tidyr::pivot_wider(names_from = Metric, values_from = prim) %>%\n  select(-row)\n\n# A tibble: 5 x 5\n#  Accession  Genus   Species `Forward Template`    `Reverse Template`   \n#  <chr>      <chr>   <chr>   <chr>                 <chr>                \n#1 CP042983.1 Histop\xe2\x80\xa6 somni   601881  ............\xe2\x80\xa6 601973  ............\xe2\x80\xa6\n#2 CP042983.1 Histop\xe2\x80\xa6 somni   331595  ............\xe2\x80\xa6 331687  ............\xe2\x80\xa6\n#3 CP042983.1 Histop\xe2\x80\xa6 somni   196557  ............\xe2\x80\xa6 196649  ............\xe2\x80\xa6\n#4 CP042983.1 Histop\xe2\x80\xa6 somni   153933  ............\xe2\x80\xa6 154025  ............\xe2\x80\xa6\n#5 CP042983.1 Histop\xe2\x80\xa6 somni   2100939  ...........\xe2\x80\xa6 2100847  ...........\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n