我有以下数据集的摘录:
basisanddowngradessingledates[3017:3023, c("Dates", "Bank", "Rating agency") ]
Dates Bank Rating agency
3017 2011-10-04 Banca Monte dei Paschi di Siena SpA NA
3018 2011-10-05 Banca Monte dei Paschi di Siena SpA Moody's
3019 2011-10-06 Banca Monte dei Paschi di Siena SpA NA
3020 2011-10-07 Banca Monte dei Paschi di Siena SpA NA
3021 2011-10-10 Banca Monte dei Paschi di Siena SpA NA
3022 2011-10-11 Banca Monte dei Paschi di Siena SpA Fitch
3023 2011-10-12 Banca Monte dei Paschi di Siena SpA NA
我的数据集有45078个条目,536个降级(“评级机构”栏目不是“NA”)。我需要在降级之前有一行,有一行发生的行和降级后的行。
我使用以下命令执行此操作:
keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval1 <- basisanddowngradessingledates[c(keepindex-1,keepindex,
keepindex+1), ]
这给了我这个输出:
interval1[c(14:15, 358:359, 696:697),c("Dates", "Bank", "Rating agency")]
Dates Bank Rating agency
14 2011-10-04 Banca Monte dei Paschi di Siena SpA NA
15 2011-10-10 Banca Monte dei Paschi di Siena SpA NA
358 2011-10-05 Banca Monte dei Paschi di Siena SpA Moody's
359 2011-10-11 Banca Monte dei Paschi di Siena SpA Fitch
696 2011-10-06 Banca Monte dei Paschi di Siena SpA NA
697 2011-10-12 Banca Monte dei Paschi di Siena SpA NA
现在关注我:我需要重新排序列表,以便相应降级的3行在我的输出中相互匹配。 在我的例子中这样:
Dates Bank Rating agency
14 2011-10-04 Banca Monte dei Paschi di Siena SpA NA
358 2011-10-05 Banca Monte dei Paschi di Siena SpA Moody's
696 2011-10-06 Banca Monte dei Paschi di Siena SpA NA
15 2011-10-10 Banca Monte dei Paschi di Siena SpA NA
359 2011-10-11 Banca Monte dei Paschi di Siena SpA Fitch
697 2011-10-12 Banca Monte dei Paschi di Siena SpA NA
问题是我无法按日期对其进行排序,我尝试过,但如果连续几天我有多次降级,它会给我一团糟。
我该如何解决这个问题?
答案 0 :(得分:2)
对于边缘情况(例如, 2连续两天降级,第一天/最后一天降级)应对此进行清理:
df <- data.frame(date = Sys.Date() - 19:0, dgrd = NA)
df$dgrd[c(4, 10, 11, 16, 20)] <- "X" # add downgrades including tricky cases
down <- which(!is.na(df$dgrd))
keep <- unique(sort(c(down-1, down, down + 1))) # unique() prevents overlap
# make sure you're not asking for indices outside of 1:nrow(df)
df2 <- df[keep[keep %in% 1:nrow(df)], ]
date dgrd
2017-09-26 <NA>
2017-09-27 X
2017-09-28 <NA>
2017-10-02 <NA>
2017-10-03 X
2017-10-04 X
2017-10-05 <NA>
2017-10-08 <NA>
2017-10-09 X
2017-10-10 <NA>
2017-10-12 <NA>
2017-10-13 X