我有一个向量'a',它是行索引的数字向量。我想从称为“数据”的数据框中获取这些行以及它们旁边的下20行。有办法吗?
我已经尝试过:
data2 <- data[a:a+20,]
,但没有成功。
如果a <- c(1, 21, 42)
我想从“数据”中提取行1:20、21:41和42:62,并将它们存储在另一个对象中。
答案 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))), ]