提取给定行号(变量n)上下的n行

时间:2018-02-09 13:10:53

标签: r rows

我有一个数据集" 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确定

1 个答案:

答案 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, ]