je l'extrait suivant de mon ensemble de données:Autoriser les doublons de sélection de rangée en utilisant un intervalle dans R
basisanddowngradessingledates[1716:1721, ]
# A tibble: 6 x 23
Dates Bank CDS Bond `Swap zero rate` `CDS-bond basis` `Basis change` `Rating agency`
<dttm> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 2015-05-15 Allied Irish Banks PLC 129.63 201.0235 40.6 -30.79352 1.9408116 NA
2 2015-05-18 Allied Irish Banks PLC 129.64 202.1998 41.0 -31.55976 -0.7662374 NA
3 2015-05-19 Allied Irish Banks PLC 129.65 200.4579 39.0 -31.80792 -0.2481631 Fitch
4 2015-05-20 Allied Irish Banks PLC 129.65 203.9960 39.0 -35.34598 -3.5380550 DBRS
5 2015-05-21 Allied Irish Banks PLC 129.63 203.5341 41.0 -32.90415 2.4418300 NA
6 2015-05-22 Allied Irish Banks PLC 130.64 203.2723 40.0 -32.63234 0.2718045 NA
Nous voudrions pouvoir sélectionner les intervalles [-1: 1], ce qui correspond à la veille et le lendemain d'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 [1717: 1719] et [1718: 1720], donc 6 lignes, pour chaque niveau inférieur 3.
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 s'est produite.
Je l'ai essayé en utilisant le code suivant:
keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval11 <- unique(c(keepindex-1, keepindex, keepindex+1))
interval1ra1 <- basisanddowngradessingledates[interval11,]
Cela fonctionne s'il n'y a pas de révisions à la baisse sur les jours consécutifs. Cependant, dans mon exemple de l'extrait que j'ai deux révisions à la baisse juste après l'autre et je reçois la sortie suivante:
print(interval1ra1[c(11:12, 348, 674), ])
# A tibble: 4 x 23
Dates Bank CDS Bond `Swap zero rate` `CDS-bond basis` `Basis change` `Rating agency`
<dttm> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
1 2015-05-18 Allied Irish Banks PLC 129.64 202.1998 41 -31.55976 -0.7662374 NA
2 2015-05-19 Allied Irish Banks PLC 129.65 200.4579 39 -31.80792 -0.2481631 Fitch
3 2015-05-20 Allied Irish Banks PLC 129.65 203.9960 39 -35.34598 -3.5380550 DBRS
4 2015-05-21 Allied Irish Banks PLC 129.63 203.5341 41 -32.90415 2.4418300 NA
avoir 4 rangs au lieu de 6 dont j'ai besoin.
Je suppose que la fonction unique()
empêche les lignes en double, mais dans mon exemple j'ai besoin de ces lignes comme décrit ci-dessus.
Comment puis-je résoudre ce problème?
Mais j'ai un grand ensemble de données de 45726 entrées composé, entrant donc chaque ligne problemtic est séparément un peu incommode. – rbonac