2017-10-11 17 views
0

je l'extrait suivant de mon jeu de données:Sélectionnez plusieurs lignes en fonction des conditions dans 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 

je voudrais sélectionner les intervalles [-1: 1], ce qui correspond à la veille et le lendemain une rétrogradation. A la ligne où la colonne "Agence de notation" n'est pas "NA" indique qu'un déclassement s'est produit. Dans mon exemple ci-dessus, les lignes [990: 992].

Mon jeu de données a 45276 entrées avec 536 déclassements (colonne "Agence de notation" n'est pas "NA") où je voudrais construire une liste contenant les 3 lignes où une rétrogradation est entre comme ceci pour tout mon jeu de données:

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 

Je l'ai essayé avec cette commande:

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

ce qui a donné lieu à cette erreur:

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

Qu'est-ce que je fais mal?

Répondre

1

Essayez cette

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,] 
+0

Le second a travaillé, mais je devais changer votre == « NA » à! =, Car je veux que les dates de déclassement et non ceux où aucune dégradation survenue. Sinon excellent, merci beaucoup. – rbonac

+0

Bonne prise. Vous avez oublié que vous vouliez le '! =' – CPak