Sie können diese unter Verwendung einer Base R (dh Vermeidung data.tables), mit dem folgenden Code erreichen:
df <- 'chr start end samples
1 10 20 2
2 4 10 3'
df <- read.table(text = df, header = TRUE)
duplicate_rows <- function(chr, starts, ends, samples) {
expanded_samples <- paste0(chr, "-", starts, "-", ends, "-", "s", 1:samples)
repeated_rows <- data.frame("chr" = chr, "starts" = starts, "ends" = ends, "samples" = expanded_samples)
repeated_rows
}
expanded_rows <- Map(f = duplicate_rows, df$chr, df$start, df$end, df$samples)
new_df <- do.call(rbind, expanded_rows)
Die Grundidee ist, eine Funktion zu definieren, die eine einzelne Zeile von Ihren ersten Daten nehmen. Rahmen und doppelte Zeilen basierend auf dem Wert in der samples
Spalte (sowie das Erstellen der verschiedenen Zeichenfolgen, die Sie suchen). Diese Funktion wird dann auf jede Zeile Ihres ursprünglichen data.frames angewendet. Die Ausgabe ist eine Liste von data.frames, die dann unter Verwendung des do.call
-Musters zu einem einzelnen data.frame zusammengefasst werden müssen. (Auf CRAN) und die data.frame spezifische Version der Karten
Der obige Code kann purrr Paket mithilfe der Hadley Wickhams gemacht sauberer werden (siehe Dokumentation für die by_row
Funktion), aber dies kann viel des Guten für das, was Sie sein bin danach.
Sie 'df verwenden können [rep (seq (nrow (df)), df $ Proben),]' – mtoto