Как я могу выбрать только 10 предыдущих строк перед всеми строками, которые удовлетворяют условию? - PullRequest
2 голосов
/ 11 июля 2019

У меня есть набор данных временного ряда в среде R.Переменная CB_Day равна MPD в некоторые даты и 0 в большинстве дат.

Я хочу удалить все строки, кроме дней MPD и 10 предыдущих дней.

Я пробовал subset , head () и tail () , но они не работали.

Может кто-нибудь сказать мне, какая команда подходит для удаления записей на основе моего состояния в R?

Результатом должна быть вся таблица со всеми остальными столбцами.Только строки должны быть удалены.

1 Ответ

2 голосов
/ 11 июля 2019

Если я правильно понял, то что-то вроде этого должно помочь ...

# create data where CB_Day is always 0 (please provide reproducible data next time)
df <- data.frame(MPD  = 1:100, CB_Day = rep(0, 100))
# sometimes CB_Day is same as MPD
df$CB_Day[c(20, 70)] <- df$MPD[c(20, 70)]
# Find where both are same
same <- which(df$MPD== df$CB_Day)
# create vectors with "10 rows before CB_Day and MPD are same" to the row where they are same
keep <- sapply(same, function(x){(x-10):x})
# make it a vector instead of a matrix
keep <- unlist(keep)
# select the rows
df[keep, ]
...