首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按条件和顺序选择多行

按条件和顺序选择多行
EN

Stack Overflow用户
提问于 2017-10-13 09:59:51
回答 1查看 59关注 0票数 0

我有以下数据集的摘录:

代码语言:javascript
复制
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")。我需要在降级前有行、发生降级的行和降级后的行。

我使用以下命令完成了此操作:

代码语言:javascript
复制
keepindex <- which(basisanddowngradessingledates[,8] != "NA")
interval1 <- basisanddowngradessingledates[c(keepindex-1,keepindex, 
keepindex+1), ]

这给了我这个输出:

代码语言:javascript
复制
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行放在后面。在我的示例中,如下所示:

代码语言:javascript
复制
    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

问题是我不能按日期分类,我试过了,但是如果我连续几天被降级,这会给我带来麻烦。

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-13 10:47:19

对于边缘情况(例如连续两天降级两次,在第一天/最后一天降级),应对此进行消毒:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46727302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档