# Mini example data sets
df.CD4 <- tibble::tribble(
~cdr3_amino_acid, ~v_resolved, ~j_resolved, ~reads,
"CASRATSGRAYEQYF", "TRBV3", "TRBJ2-7", 10,
"CASSPTPGQVNYGYTF", "TRBV4-1", "TRBJ1-2", 4,
"CASSLGLAGLYEQYF", "TRBV5-1", "TRBJ2-7", 3,
"CASRPTGTGELFF", "TRBV11-3", "TRBJ2-2", 3,
"CASSDLQGEGEQYF", "TRBV2-1", "TRBJ2-7", 2,
"CSARFPSVAVYNEQFF", "TRBV20", "TRBJ2-1", 2,
"CASRDRGSYGYTF", "TRBV2-1", "TRBJ1-2", 1,
"CASSAGTSGGSGDTQYF", "TRBV9-1", "TRBJ2-3", 1,
"CASSGQGAQEQYF", "TRBV6-6", "TRBJ2-7", 1,
"CASSSTSAGTDTQYF", "TRBV12", "TRBJ2-3", 1
)
df.CD8 <- tibble::tribble(
~cdr3_amino_acid, ~v_resolved, ~j_resolved, ~reads,
"CASRPTGTGELFF", "TRBV11-3", "TRBJ2-2", 100,
"CASRATSGRAYEQYF", "TRBV3", "TRBJ2-7", 80,
"CASSDLQGEGEQYF", "TRBV2-1", "TRBJ2-7", 30,
"CASSPTPGQVNYGYTF", "TRBV4-1", "TRBJ1-2", 10,
"CASSLGLAGLYEQYF", "TRBV5-1", "TRBJ2-7", 4,
"CSARFPSVAVYNEQFF", "TRBV20", "TRBJ2-1", 2,
"CASSFDRDGYGYTF", "TRBV7-2", "TRBJ1-2", 2,
"CASSEEVWGYTF", "TRBV6-1", "TRBJ1-2", 1,
"CASTQSNTGELFF", "TRBV6-1", "TRBJ2-2", 1,
"CASSPLTGPGREQFF", "TRBV18-1", "TRBJ2-1", 1
)
# use data.table back-end for dplyr
dt.CD4 <- dtplyr::lazy_dt(
x = df.CD4,
key_by = c("cdr3_amino_acid", "v_resolved", "j_resolved")
)
dt.CD8 <- dtplyr::lazy_dt(
x = df.CD8,
key_by = c("cdr3_amino_acid", "v_resolved", "j_resolved")
)
# inner_join
dt.inner <- dplyr::inner_join(
x = dt.CD4, y = dt.CD8,
by = c("cdr3_amino_acid", "v_resolved", "j_resolved"),
suffix = c(".CD4", ".CD8")
)
# inner_join works with custom suffixes
dt.inner
#> Source: local data table [6 x 5]
#> Call: setnames(`_DT1`[`_DT2`, on = .(cdr3_amino_acid, v_resolved, j_resolved),
#> nomatch = NULL, allow.cartesian = TRUE], c("reads", "i.reads"
#> ), c("reads.CD4", "reads.CD8"))
#>
#> cdr3_amino_acid v_resolved j_resolved reads.CD4 reads.CD8
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 CASRATSGRAYEQYF TRBV3 TRBJ2-7 10 80
#> 2 CASRPTGTGELFF TRBV11-3 TRBJ2-2 3 100
#> 3 CASSDLQGEGEQYF TRBV2-1 TRBJ2-7 2 30
#> 4 CASSLGLAGLYEQYF TRBV5-1 TRBJ2-7 3 4
#> 5 CASSPTPGQVNYGYTF TRBV4-1 TRBJ1-2 4 10
#> 6 CSARFPSVAVYNEQFF TRBV20 TRBJ2-1 2 2
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# full_join
dt.full <- dplyr::full_join(
x = dt.CD4, y = dt.CD8,
by = c("cdr3_amino_acid", "v_resolved", "j_resolved"),
suffix = c(".CD4", ".CD8")
)
# the custom suffixes ".CD4" and ".CD8" didn't work in full_join
# it used the default ".x" and ".y" suffixes instead.
dt.full
#> Source: local data table [14 x 5]
#> Call: merge(`_DT1`, `_DT2`, all = TRUE, by.x = c("cdr3_amino_acid",
#> "v_resolved", "j_resolved"), by.y = c("cdr3_amino_acid", "v_resolved",
#> "j_resolved"), allow.cartesian = TRUE)
#>
#> cdr3_amino_acid v_resolved j_resolved reads.x reads.y
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 CASRATSGRAYEQYF TRBV3 TRBJ2-7 10 80
#> 2 CASRDRGSYGYTF TRBV2-1 TRBJ1-2 1 NA
#> 3 CASRPTGTGELFF TRBV11-3 TRBJ2-2 3 100
#> 4 CASSAGTSGGSGDTQYF TRBV9-1 TRBJ2-3 1 NA
#> 5 CASSDLQGEGEQYF TRBV2-1 TRBJ2-7 2 30
#> 6 CASSEEVWGYTF TRBV6-1 TRBJ1-2 NA 1
#> # … with 8 more rows
#> # ℹ Use `print(n = ...)` to see more rows
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
# downstream code relying on custom suffixes in full_join is now broken.
dplyr::mutate(dt.full, dplyr::across(
.cols = tidyr::matches("\\.CD4|\\.CD8"),
.fns = ~ tidyr::replace_na(.x, 0)
))
#> Error in fcoalesce(reads.CD4, 0): object 'reads.CD4' not found
Custom suffixes given to the
suffixargument indplyr::full_joinfail to be implemented in the returned data frame when thexandyinput data frames are first converted withdtplyr::lazy_dt. This appears to be related to closed Issue #40, which was fixed in Pull Request #48.Created on 2022-08-04 by the reprex package (v2.0.1)
Session info