我有一个数据集,里面有几家公司多年来的几个财务比率。但我的问题是,比率的周期不同。数据集的一部分如下(日期设计为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
希望任何人都能帮助
您可以使用lubridate
的ymd
将日期转换为日期对象,并使用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")