基于日期减少具有多个条件的数据集中的行数



我有一个数据集,里面有几家公司多年来的几个财务比率。但我的问题是,比率的周期不同。数据集的一部分如下(日期设计为yyyymmdd(:

CopanyName     StartDate     EndDate      ROA      ROE     
AAR CORP       20050301      20050531     0.086    0.057
AAR CORP       20050301      20050831     0.092    0.065
AAR CORP       20050301      20051130     0.099    0.073
AAR CORP       20050301      20060228     0.108    0.083
AAR CORP       20060301      20060531     0.107    0.090
AAR CORP       20060301      20060831     0.117    0.110
AAR CORP       20060301      20061130     0.116    0.116
AAR CORP       20060301      20070228     0.115    0.112
ARP            20050601      20050831     0.076    0.053
ARP            20050601      20051130     0.082    0.068
ARP            20050601      20060228     0.089    0.075
ARP            20050601      20060531     0.098    0.081
ARP            20060601      20060831     0.077    0.068
ARP            20060601      20061130     0.079    0.067
ARP            20060601      20070228     0.086    0.078
ARP            20060601      20070531     0.095    0.083

现在我想通过删除所有季度更新来减少行数。因此,对于这个简化的数据集,它的结果是:

CopanyName     StartDate     EndDate      ROA      ROE  
AAR CORP       20050301      20060228     0.108    0.083
AAR CORP       20060301      20070228     0.115    0.112
ARP            20050601      20060531     0.098    0.081
ARP            20060601      20070531     0.095    0.083

对于这样一个简单的数据集,我可以手动删除其他行,但我有一个数据集,其中包含4000多家公司的数据和150000多个观察结果。希望有人能帮我。

作为后续行动,我想更改日期栏。我想创建一个一年的专栏。所以它看起来是这样的:

CopanyName     Year     ROA      ROE  
AAR CORP       2005     0.108    0.083
AAR CORP       2006     0.115    0.112
ARP            2005     0.098    0.081
ARP            2006     0.095    0.083

希望任何人都能帮助

您可以使用lubridateymd将日期转换为日期对象,并使用dplyr根据这些对象进行筛选,只保留一整年的行(此处为安全起见,为360天(:

library(lubridate)
library(dplyr)
dat |>
mutate(across(ends_with("Date"), ymd),
Year = year(StartDate)) |>
filter(EndDate - StartDate > 360) |>
select(-ends_with("Date"))

在每四行一次的简单情况下:

library(dplyr)
dat |>
filter(row_number() %% 4 == 0) |>
mutate(Year = substr(StartDate, start = 1, stop = 4)) |>
select(-ends_with("Date"))

输出:

# A tibble: 4 × 4
CopanyName   ROA   ROE  Year
<chr>      <dbl> <dbl> <dbl>
1 AAR CORP   0.108 0.083  2005
2 AAR CORP   0.115 0.112  2006
3 ARP        0.098 0.081  2005
4 ARP        0.095 0.083  2006

数据:

dat <-
read_csv("CopanyName,     StartDate,     EndDate,      ROA,      ROE     
AAR CORP,       20050301,      20050531,     0.086,    0.057
AAR CORP,       20050301,      20050831,     0.092,    0.065
AAR CORP,       20050301,      20051130,     0.099,    0.073
AAR CORP,       20050301,      20060228,     0.108,    0.083
AAR CORP,       20060301,      20060531,     0.107,    0.090
AAR CORP,       20060301,      20060831,     0.117,    0.110
AAR CORP,       20060301,      20061130,     0.116,    0.116
AAR CORP,       20060301,      20070228,     0.115,    0.112
ARP,            20050601,      20050831,     0.076,    0.053
ARP,            20050601,      20051130,     0.082,    0.068
ARP,            20050601,      20060228,     0.089,    0.075
ARP,            20050601,      20060531,     0.098,    0.081
ARP,            20060601,      20060831,     0.077,    0.068
ARP,            20060601,      20061130,     0.079,    0.067
ARP,            20060601,      20070228,     0.086,    0.078
ARP,            20060601,      20070531,     0.095,    0.083")

最新更新