我目前正在连续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)
我不确定这是否正确,因为我正在尝试复制研究论文的结果,但此步骤之后数字不再匹配。
答案 0 :(得分:2)
一个选项是n_distinct
和group_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