r-如何在我的数据表中找到每个公司的年度发展率



所以我有一个5000家公司的数据表,每个公司都被分配了一个数值("id"(,第一家公司为1,第二家公司为2。。。

这是我的表,只有利润变量:|id |年|利润|:----|:----|----||2001年1月1日|-0.4|2002年1月1日|-0.89|2001年2月| 1.89|2002年2月|2.79

每个公司被表示两次,一行指定2001年的数据,第二行指定2002年的数据(两行的"id"值相同,因为相隔一年是同一家公司(。

如何计算2001年至2002年间每家公司的年变化率("id"(?

我真的是R的新手,我不知道从哪里开始?将2001年和2002年的数据分开?我做到了:years <- sort(unique(group$year))years

我也在互联网上发现了这个,但没有成功:

library(dplyr)
res <-
group %>%
arrange(id,year) %>%
group_by(id) %>%
mutate(evol_rate = ("group$year$2002" / lag("group$year$2001") - 1) * 100)  %>%
ungroup()


非常感谢

根据您所写的内容,我认为您想要计算2001年和2002年利润值的ROC公式:

ROC=(current_value​/previous_value − 1) ∗ 100

为了实现这一点,我建议使用tidyr::pivot_wider(),它将数据帧从长格式重塑为宽格式(请参阅:https://r4ds.had.co.nz/tidy-data.html#pivoting)。

代码:

require(tidyr)
require(dplyr)
id <- sort(rep(seq(1,250, 1), 2))
year <- rep(seq(2001, 2002, 1), 500)
value <- sample(500:2000, 500)
df <- data.frame(id, year, value)
head(df, 10)
#>    id year value
#> 1   1 2001   856
#> 2   1 2002  1850
#> 3   2 2001  1687
#> 4   2 2002  1902
#> 5   3 2001  1728
#> 6   3 2002  1773
#> 7   4 2001   691
#> 8   4 2002  1691
#> 9   5 2001  1368
#> 10  5 2002   893
df_wide <- df %>%
pivot_wider(names_from = year,
names_prefix = "profit_",
values_from = value,
values_fn = mean)
res <- df_wide %>%
mutate(evol_rate = (profit_2002/profit_2001-1)*100) %>%
round(2)
head(res, 10)
#> # A tibble: 10 x 4
#>       id profit_2001 profit_2002 evol_rate
#>    <dbl>       <dbl>       <dbl>     <dbl>
#>  1     1         856        1850    116.  
#>  2     2        1687        1902     12.7 
#>  3     3        1728        1773      2.6 
#>  4     4         691        1691    145.  
#>  5     5        1368         893    -34.7 
#>  6     6         883         516    -41.6 
#>  7     7        1280        1649     28.8 
#>  8     8        1579        1383    -12.4 
#>  9     9        1907        1626    -14.7 
#> 10    10        1227        1134     -7.58

如果您想在不将数据重塑为宽格式的情况下完成此操作,可以使用

library(tidyverse)
id <- sort(rep(seq(1,250, 1), 2))
year <- rep(seq(2001, 2002, 1), 500)
value <- sample(500:2000, 500)
df <- data.frame(id, year, value)
df %>% head(n = 10)
#>    id year value
#> 1   1 2001  1173
#> 2   1 2002  1648
#> 3   2 2001  1560
#> 4   2 2002  1091
#> 5   3 2001  1736
#> 6   3 2002   667
#> 7   4 2001  1840
#> 8   4 2002  1202
#> 9   5 2001  1597
#> 10  5 2002  1797
new_df <- df %>%
group_by(id) %>%
mutate(ROC = ((value / lag(value) - 1) * 100))
new_df %>% head(n = 10)
#> # A tibble: 10 × 4
#> # Groups:   id [5]
#>       id  year value   ROC
#>    <dbl> <dbl> <int> <dbl>
#>  1     1  2001  1173  NA  
#>  2     1  2002  1648  40.5
#>  3     2  2001  1560  NA  
#>  4     2  2002  1091 -30.1
#>  5     3  2001  1736  NA  
#>  6     3  2002   667 -61.6
#>  7     4  2001  1840  NA  
#>  8     4  2002  1202 -34.7
#>  9     5  2001  1597  NA  
#> 10     5  2002  1797  12.5

这将按id对数据进行分组,然后使用lag将当前年份与前一年进行比较

最新更新