I cannot get my data frame to pivot_wider into one row per observation set. The data frame has paired observations (Copy
; Forward Template
and Reverse Template
, with values in prim
) nested within Accession
. I'm trying to pivot_wider, leaving a row per paired observation In the final data frame, I need to be able to trace copy
to Accession
when summarising.
Moving forward I would also like to include three observations per copy (not included in this example).
The code below produces a separate column for each value of 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
How do I create a data frame where both the Reverse Template
and Forward Template
columns are populated, and only one row per observation is created?
Cheers