Подмножество строк во фрейме данных, основанное на задержке и диапазоне отведений относительно указанной строки - PullRequest
1 голос
/ 03 апреля 2020

У меня есть фрейм данных, где я указываю определенные строки с «1» (см. Df1). Я хотел бы установить подкадр данных, включая строки, где i = 1, а также все 2 строки «до» (lag1 и lag2), а также 2 строки «после» (lead1 и lead2) строки, обозначенной i (см. Пример df2) , Две строки просто для иллюстрации вопроса - я также мог бы использовать код для подмножества, например, 4 "до" и 4 строки "после" каждый i = 1.

df1 <- data.frame(i =(0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0),
                  values = c(9,74,30,81,14,88,62,9,32,64,3,56,84,61,95,97,65,76,31,33,56,69,77,81,80))
df2 <- data.frame(i = c(0,0,1,0,0,0,0,1,0,0,0,1,0,0),
                  values = c(9,32,64,3,56,95,97,65,76,31,33,56,69,77))

Большое спасибо .

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете генерировать индексы +/- 2 от i и подмножества, используя эти:

idx <- unique(c(sapply(which(df1$i == 1), function(x) (x-2):(x+2))))

# Remove index values that might be out of range.
idx <- idx[idx > 0 & idx <= nrow(df1)]

df1[idx,] 

   i values
8  0      9
9  0     32
10 1     64
11 0      3
12 0     56
15 0     95
16 0     97
17 1     65
18 0     76
19 0     31
20 0     33
21 1     56
22 0     69
23 0     77
...