有没有一种方法可以基于行索引向量获取数据帧行?

时间:2019-07-21 00:32:09

标签: r

我有一个向量'a',它是行索引的数字向量。我想从称为“数据”的数据框中获取这些行以及它们旁边的下20行。有办法吗?

我已经尝试过:
data2 <- data[a:a+20,],但没有成功。

如果a <- c(1, 21, 42) 我想从“数据”中提取行1:20、21:41和42:62,并将它们存储在另一个对象中。

3 个答案:

答案 0 :(得分:5)

这是没有花哨功能和for循环的另一种方式:

data2 <- data[rep(a, each = 21) + 0:20,]

答案 1 :(得分:1)

如果我了解您,则以下方法应该有效:

do.call("rbind",lapply(a,function(i) data[i:(i+20),]))

请参见this question,了解如何将数据框列表转换为单一数据框(这是我的回答中最不直观的部分)。该问题的答案比do.call()更为直观,但需要超越基数R。

答案 2 :(得分:1)

这是从底数R开始使用Map的一种方法-

data[unlist(Map(`:`, a, a+20)), ]

或使用sapply(类似于约翰的回答)-

data[c(sapply(a, function(x) x:(x+20))), ]