は、次のコードで、この使用してベースR(すなわち回避data.tables)を達成することができます
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)
基本的な考え方は、あなたの最初のデータから単一の行を取る関数を定義することです。フレームを作成し、samples
列の値に基づいて行を複製します(後に別の文字列を作成することもできます)。この関数は、最初のdata.frameの各行に適用されます。出力は、do.call
パターンを使用して1つのdata.frameに再合成する必要があるdata.framesのリストです。
上記のコードは、Hadley Wickhamのpurrrパッケージ(CRAN)とdata.frame特有のバージョンのマップ(by_row
関数のドキュメントを参照)を使用してよりクリーンにすることができますが、後で。
あなたは '[、($サンプルDF配列(nrow(DF))、)担当者]' DFを使用することができます – mtoto