我有一个数据集" dat"如下:
ChromKey CHROM POS ID REF ALT length
11438 1 chr1 27023450 <NA> AGCG A 4
11755 1 chr1 27023767 <NA> CA C 3
12521 1 chr1 27057930 <NA> GA G 2
13174 1 chr1 27088681 <NA> TC T 3
14861 1 chr1 27100181 <NA> CGCA C 2
15593 1 chr1 27101426 <NA> TCTAA T 5
此数据集是作为另一个更大的数据集的子集创建的,该数据集包含dat中的每个行以及更多行。让我们称这个原始的完整数据集&#34; dat.ori&#34;。 (最左边的数字是dat.ori数据集中已经被子集化以创建数据的行号。)
从原始的较大数据集中我想创建一个数据集,这样我就可以提取dat中的行以及行号上下的n行,其中n是变量 length下给出的值在dat中。例如,我需要从dat.ori中提取的行是
11434, 11435, 11436, 11437, 11438, 11439, 11440, 11441, 11442, 11752, 11753,
11754, 11755, 11756, 11757, 11758 and so on
这是11438上下4行,11755上下3行,12521上下2行等。
有没有办法在R中这样做?非常感谢! :)
(道歉,这不是最可重复的例子,但我会尝试编辑这个,以便受访者可以重现这个例子)
更新:这是我做的(来自:Returning above and below rows of specific rows in r dataframe)
myRows=c(rownames(dat))
rowRanges <- lapply(which(rownames(dat.ori) %in% myRows), function(x) x + c(-1:1))
final=lapply(rowRanges, function(x) dat.ori[x, ])
这正是我所需要的,但它只给我上面和下面的一个行(由c(-1:1)设置)。我需要的是这个被调整,以便在上面和下面有n行,其中n由dat $ length确定
答案 0 :(得分:3)
可能的解决方案:
r <- rep(as.numeric(row.names(dat)), 2 * dat$length + 1)
u <- unlist(Map(':', -dat$length, dat$length))
idx <- r + u
现在,您可以使用以下内容从dat.ori
中提取这些行
dat.ori[idx, ]
或者:
dat.ori[r + u, ]