我目前正在查看连续9个季度的银行数据。我现在只想保留那些我拥有所有9个季度数据的银行。每家银行都有一个唯一的认证ID,我如何使用ID进行过滤,并且只保留连续9次观察的银行?
也许这样做的一种方法是计算证书ID (cert)出现的频率,并仅保留具有9个观察值的证书ID。这就是我所尝试的:
df <- (...)
a = rle(sort(df$cert))
b = data.frame(id=a$values, n=a$lengths)
c = subset(b, n==9)我不确定这是否正确,因为我试图重现一篇研究论文的结果,但在这一步之后,数字不再匹配。
发布于 2018-08-20 21:04:07
一种选择是使用group_by进行n_distinct,按'id‘分组,检查'qtr’中不同元素的数量是否为9,并对那些'id's行执行filter操作
library(dplyr)
df %>%
group_by(id) %>%
filter(n_distinct(qtr) ==9)发布于 2018-08-20 20:57:41
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))发布于 2018-08-20 20:59:45
生成了一个示例。使用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 27https://stackoverflow.com/questions/51931155
复制相似问题