dplyr将检查每家公司是否有6月份的历史记录

dplyr将检查每家公司是否有6月份的历史记录,r,dplyr,R,Dplyr,我有一个1百万以上的数据集,需要检查每个公司(cusip)和年份(fyear)是否有6月份的观察值,其中datadate为YYYYMMDD。我曾尝试使用substr()提取该月数据,并进行了逻辑测试,如果为真,则不进行处理,但如果不是,则会删除cusip。但是,这不起作用,返回的错误不是逻辑参数和条件长度。我已经在dplyr之外仔细检查了每一个问题,以确保一切正常,除了dplyr内部之外,我没有遇到任何问题。任何帮助都将不胜感激 可复制代码: tdata <- structure(list

我有一个1百万以上的数据集,需要检查每个公司(
cusip
)和年份(
fyear
)是否有6月份的观察值,其中
datadate
为YYYYMMDD。我曾尝试使用
substr()
提取该月数据,并进行了逻辑测试,如果为真,则不进行处理,但如果不是,则会删除
cusip
。但是,这不起作用,返回的错误不是逻辑参数和条件长度。我已经在
dplyr
之外仔细检查了每一个问题,以确保一切正常,除了
dplyr
内部之外,我没有遇到任何问题。任何帮助都将不胜感激

可复制代码:

tdata <- structure(list(cusip = c(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 2), fyear = c(1962L, 
1963L, 1964L, 1965L, 1966L, 1967L, 1968L, 1969L, 1970L, 1971L, 
1972L, 1973L, 1974L, 1975L, 1976L, 1977L, 1978L, 1979L, 1980L, 
1981L, 1982L, 1983L, 1984L, 1985L, 1962L, 1963L, 1964L, 1965L, 
1966L, 1967L, 1969L), datadate = c(19620631L, 19630631L, 19640631L, 
19651231L, 19661231L, 19670631L, 19680631L, 19691231L, 19700631L, 
19710631L, 19720631L, 19730631L, 19740631L, 19751231L, 19760631L, 
19770631L, 19780631L, 19791231L, 19800631L, 19810631L, 19820631L, 
19831231L, 19841231L, 19850631L, 19621231L, 19630631L, 19640631L, 
19650631L, 19660631L, 19670631L, 19690631L)), .Names = c("cusip", "fyear", 
"datadate"), row.names = c(NA, 31L), class = "data.frame")

tdata %>% 
  group_by(cusip) %>% 
  group_by(fyear) %>% 
  arrange(desc(datadate)) %>% 
  if(substr(datadate[1], 5,6) != 06) cusip <- NULL
tdata%
分组依据(cusip)%>%
分组依据(fyear)%>%
排列(描述(数据日期))%>%

如果(substr(datadate[1],5,6)!=06)cusip为什么不为第一个月创建一列?比如:

library(dplyr)
tdata$month <- substr(tdata$datadate, 5, 6)

tdata %>%
  group_by(cusip, fyear) %>%
  mutate(has_June = month == "06")

然后,您可以通过添加:
%%>%filter(month!=“06”)

找到没有June的月份。实际上,这是一种逻辑,如果将June作为月份,则为true,否则为false。我需要它来检查每年是否有6月份的数据集,如果有,保留当年的所有月份。否则,删除该年的cusip代码。然后将其更改为
has_June=any(month==“06”)
library(dplyr)
tdata$month <- substr(tdata$datadate, 5, 6)

tdata %>%
  group_by(cusip, fyear) %>%
  mutate(has_June = month == "06")
tdata %>%
  group_by(cusip, fyear) %>%
  mutate(month = substr(datadate, 5, 6),
         has_June = month == "06")