允许在行选择重复的行中的R
问题描述:
使用间隔我有数据集的以下提取物:允许在行选择重复的行中的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
我想选择的时间间隔[-1:1],其对应于前一天并在降级后的第二天。在该行,其中列“评级机构”是不是“NA”表示降级已发生。在我上面的示例中,对于每个降级3,行[1717:1719]和[1718:1720],因此为6行。
我的数据集包含45276个条目,其中536个降级(列“评级机构”不是“NA” )在那里我想建立一个包含降级发生的3行的列表。
我试过用下面的代码:
keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval11 <- unique(c(keepindex-1, keepindex, keepindex+1))
interval1ra1 <- basisanddowngradessingledates[interval11,]
如果有连续几天没有降级这工作。然而,在我的例子中提取我有右后两个互相降级,我得到下面的输出:
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
我得到4行,而不是6,我需要。
我猜unique()
功能可防止重复行,但在我的例子中,我需要为上述这些行。
我该如何解决这个问题?
答
这里是一个可能的解决方案以获得先前和下一行的每个匹配的行:
> 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), ]
+0
我也想过这一个,但在这个解决方案keepindex的顺序并不为每行指定一个和下一个行。 > C(keepindex-1,keepindex,keepindex + 1) [1] 1717 1718 1718 1719 1719 1720 – Heikki
但是我有一个大的数据集,包括45726个条目,因此进入每个problemtic行分别是有点不方便。 – rbonac