我想根据列在数据框中重复整行samples。
我的输入:
df <- 'chr start end samples
1 10 20 2
2 4 10 3'
df <- read.table(text=df, header=TRUE)
Run Code Online (Sandbox Code Playgroud)
我的预期输出:
df <- 'chr start end samples
1 10 20 1-10-20-s1
1 10 20 1-10-20-s2
2 4 10 2-4-10-s1
2 4 10 2-4-10-s2
2 4 10 2-4-10-s3'
Run Code Online (Sandbox Code Playgroud)
一些想法如何明智地执行它?
我们可以使用expandRows基于 'samples' 列中的值扩展行,然后转换为data.table,按 'chr' 分组,我们将列与行序列粘贴在一起,sprintf用于更新 'samples' 列。
library(splitstackshape)
setDT(expandRows(df, "samples"))[,
samples := sprintf("%d-%d-%d-%s%d", chr, start, end, "s",1:.N) , chr][]
# chr start end samples
#1: 1 10 20 1-10-20-s1
#2: 1 10 20 1-10-20-s2
#3: 2 4 10 2-4-10-s1
#4: 2 4 10 2-4-10-s2
#5: 2 4 10 2-4-10-s3
Run Code Online (Sandbox Code Playgroud)
注意:data.table将在我们加载时加载splitstackshape。