仅保留来自连续季度的观察结果

时间:2018-08-20 12:50:40

标签: r

我目前正在连续9个季度查看银行数据。我现在只想保留我拥有全部9个季度数据的那些银行。每个银行都有唯一的认证ID。如何使用ID进行过滤,仅保留连续9个观测值的银行?

也许执行此操作的一种方法是计算显示证书ID(cert)的频率,并仅保留带有9个观察值的证书?所以这就是我尝试过的:

df <- (...)   
a = rle(sort(df$cert))    
b = data.frame(id=a$values, n=a$lengths)   
c = subset(b, n==9)

我不确定这是否正确,因为我正在尝试复制研究论文的结果,但此步骤之后数字不再匹配。

3 个答案:

答案 0 :(得分:2)

一个选项是n_distinctgroup_by,按“ id”分组,检查“ qtr”中不同元素的数量是否为9,而filter是这些“ id”的行

library(dplyr)
df %>%
   group_by(id) %>% 
   filter(n_distinct(qtr) ==9)

答案 1 :(得分:1)

library(tidyverse)
df<-data.frame(id=rep(1:4,times=9),
               qtr=rep(1:9,each=4))

df%>%
  filter(id %in% (df%>%
                 count(id)%>%
                  filter(n>8)%>%.$id))

答案 2 :(得分:0)

产生一个例子。使用rowSums!is.na用所有9列的值计算行数。

a[rowSums(!is.na(a))==9,]

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    4    7   10   13   16   19   22   25
[2,]    3    6    9   12   15   18   21   24   27

使用的数据。

a <- matrix(1:27, ncol=9, nrow=3)
a[2,2] <- NA
a

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    4    7   10   13   16   19   22   25
[2,]    2   NA    8   11   14   17   20   23   26
[3,]    3    6    9   12   15   18   21   24   27