Выберите несколько строк по условию в R

У меня есть следующий фрагмент моего набора данных:

extract[989:993, ]
# A tibble: 5 x 2
   Dates                `Rating agency`
   <dttm>                <chr>
1 2014-07-11              NA
2 2014-07-14              NA
3 2014-07-15            DBRS
4 2014-07-16              NA
5 2014-07-17              NA

Я хотел бы выбрать интервалы [-1:1], которые соответствуют дню до и дню после понижения. В строке, где в столбце «Рейтинговое агентство» стоит не «Н/Д», это указывает на то, что произошло понижение рейтинга. В моем примере выше, строки [990:992].

В моем наборе данных 45276 записей с 536 понижениями (столбец «Рейтинговое агентство» не «NA»), где я хотел бы создать список, содержащий 3 строки, в которых понижение находится между ними, как это для всего моего набора данных:

extract[990:992, ]
# A tibble: 3 x 2
   Dates          `Rating agency`
  <dttm>           <chr>
1 2014-07-14              NA
2 2014-07-15            DBRS
3 2014-07-16              NA

Я попробовал это с помощью этой команды:

interval1 <- basisanddowngradessingledates[`Rating agency` != "NA", c(-1:1), ]

Что привело к этой ошибке:

Error in x[j] : only 0's may be mixed with negative subscripts

Что я делаю не так?


person rbonac    schedule 11.10.2017    source источник


Ответы (1)


Попробуй это

keepindex <- which(!is.na(basisanddowngradessingledates[,2]))
# keepindex <- which(basisanddowngradessingledates[,2] == "NA")  # try this if "NA" instead of NA
keepindex <- unique(c(keepindex-1, keepindex, keepindex+1))
basisanddowngradessingledates[keepindex,]
person CPak    schedule 11.10.2017
comment
Второй сработал, но мне пришлось изменить ваш == NA на !=, так как мне нужны даты понижения, а не те, когда понижение не произошло. В остальном отлично, большое спасибо. - person rbonac; 11.10.2017
comment
Хороший улов. Забыл, что ты хотел != - person CPak; 11.10.2017