允许使用R中的间隔在行选择中重复行

允许使用R中的间隔在行选择中重复行,r,select,duplicates,unique,R,Select,Duplicates,Unique,我的数据集摘录如下: 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>

我的数据集摘录如下:

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
basisandgradessingledates[1716:1721,]
#一个tibble:6x23
日期银行CDS债券`掉期零利率`` CDS债券基础``基础变更``评级机构`
1 2015-05-15爱尔兰联合银行股份有限公司129.63 201.0235 40.6-30.79352 1.9408116 NA
2 2015-05-18爱尔兰联合银行股份有限公司129.64 202.1998 41.0-31.55976-0.7662374 NA
3 2015-05-19爱尔兰联合银行股份有限公司129.65 200.4579 39.0-31.80792-0.2481631惠誉
4 2015-05-20爱尔兰联合银行股份有限公司129.65 203.9960 39.0-35.34598-3.5380550 DBRS
5 2015-05-21爱尔兰联合银行股份有限公司129.63 203.5341.0-32.90415 2.4418300 NA
6 2015-05-22爱尔兰联合银行股份有限公司130.64 203.2723 40.0-32.63234 0.2718045北美
我想选择与降级前一天和降级后一天相对应的时间间隔[-1:1]。在“评级机构”列不是“NA”的行中,表示已发生降级。在我上面的示例中,行[1717:1719]和[1718:1720]是6行,每降级3次

我的数据集有45276个条目,共有536次降级(列“评级机构”不是“NA”),我想建立一个包含发生降级的3行的列表

我使用以下代码进行了尝试:

keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval11 <- unique(c(keepindex-1, keepindex, keepindex+1))
interval1ra1 <- basisanddowngradessingledates[interval11,]

keepindex这里有一个可能的解决方案,可以为每个匹配行获取上一行和下一行:

> keepindex = c(1718,1719)
> lookupindex = c();
> for (lookupindex in keepindex) { result = c(lookupindex ,index-1,index,index+1) }
> lookupindex 
[1] 1717 1718 1719 1718 1719 1720

在此解决方案中,重叠的第1719行和第1718行显示了两次。

我自己找到了一个简单的解决方案,没有使用
unique
函数:

keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval1ra1 <- basisanddowngradessingledates[c(keepindex-1,keepindex, 
keepindex+1), ]

keepindex但我有一个由45726个条目组成的大数据集,因此单独输入每个有问题的行有点不方便。我也认为这是一个,但在这个解决方案中,keepindex的顺序没有为每一行指定上一行和下一行。>c(keepindex-1,keepindex,keepindex+1)[1]17171718171817191720
keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval1ra1 <- basisanddowngradessingledates[c(keepindex-1,keepindex, 
keepindex+1), ]