【发布时间】:2020-09-02 19:04:46
【问题描述】:
我想计算我的数据库中按变量“代码”分组的某些变量的 5 年平均增长率。这意味着在每个变量的前 4 年,我应该有 NA。数据库可以在这里下载
pwt<-structure(list(code = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("ABW",
"AFG", "AGO", "AIA", "ALB", "AND", "ANT", "ARE", "ARG", "ARM",
"ATG", "AUS", "AUT", "AZE", "BDI", "BEL", "BEN", "BFA", "BGD",
"BGR", "BHR", "BHS", "BIH", "BLR", "BLZ", "BMU", "BOL", "BRA",
"BRB", "BRN", "BTN", "BWA", "CAF", "CAN", "CH2", "CHE", "CHL",
"CHN", "CIV", "CMR", "COD", "COG", "COK", "COL", "COM", "CPV",
"CRI", "CSK", "CUB", "CUW", "CYM", "CYP", "CZE", "DEU", "DJI",
"DMA", "DNK", "DOM", "DZA", "ECU", "EGY", "ERI", "ESP", "EST",
"ETH", "FIN", "FJI", "FRA", "FSM", "GAB", "GBR", "GEO", "GHA",
"GIN", "GMB", "GNB", "GNQ", "GRC", "GRD", "GRL", "GTM", "GUY",
"HKG", "HND", "HRV", "HTI", "HUN", "IDN", "IND", "IRL", "IRN",
"IRQ", "ISL", "ISR", "ITA", "JAM", "JOR", "JPN", "KAZ", "KEN",
"KGZ", "KHM", "KIR", "KNA", "KOR", "KWT", "LAO", "LBN", "LBR",
"LBY", "LCA", "LIE", "LKA", "LSO", "LTU", "LUX", "LVA", "MAC",
"MAR", "MCO", "MDA", "MDG", "MDV", "MEX", "MHL", "MKD", "MLI",
"MLT", "MMR", "MNE", "MNG", "MOZ", "MRT", "MSR", "MUS", "MWI",
"MYS", "NAM", "NCL", "NER", "NGA", "NIC", "NLD", "NOR", "NPL",
"NRU", "NZL", "OMN", "PAK", "PAN", "PER", "PHL", "PLW", "PNG",
"POL", "PRI", "PRK", "PRT", "PRY", "PSE", "PYF", "QAT", "RKS",
"ROU", "RUS", "RWA", "SAU", "SDN", "SEN", "SGP", "SLB", "SLE",
"SLV", "SMR", "SOM", "SRB", "STP", "SUN", "SUR", "SVK", "SVN",
"SWE", "SWZ", "SXM", "SYC", "SYR", "TCA", "TCD", "TGO", "THA",
"TJK", "TKM", "TLS", "TON", "TTO", "TUN", "TUR", "TUV", "TWN",
"TZA", "UGA", "UKR", "URY", "USA", "UZB", "VCT", "VEN", "VGB",
"VNM", "VUT", "WSM", "YEM", "YUG", "ZAF", "ZMB", "ZWE"), class = "factor"),
year = c(2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L,
2007L, 2008L, 2009L, 2010L, 2000L, 2001L, 2002L, 2003L, 2004L,
2005L, 2006L, 2007L, 2008L, 2009L, 2010L), pop = c(0.090852998197079,
0.092897996306419, 0.094991996884346, 0.097016997635365,
0.098737001419067, 0.10003100335598, 0.100832000374794, 0.101219996809959,
0.101352997124195, 0.101452998816967, 0.101668998599052,
16.4409236907959, 16.9832668304443, 17.5726490020752, 18.203369140625,
18.8657169342041, 19.5525417327881, 20.2623996734619, 20.9976863861084,
21.7594203948975, 22.5495471954346, 23.3691310882568), rgdpe = c(4000.837890625,
3934.59619140625, 3882.55322265625, 3927.7529296875, 4201.69677734375,
4269.41748046875, 4308.62158203125, 4532.29345703125, 4572.1005859375,
4424.11865234375, 3971.60205078125, 37389.5859375, 37317.37109375,
42393.3671875, 44311.0546875, 52615.54296875, 65769.65625,
83384, 91420.0234375, 109108.0078125, 89716.453125, 126393.3203125
), rgdpo = c(3892.32348632812, 4312.86328125, 3251.35205078125,
3331.43383789062, 3727.60400390625, 3958.794921875, 4168.10546875,
4233.91845703125, 4455.19775390625, 4180.31884765625, 3767.7861328125,
32316.541015625, 34724.8828125, 39094.16796875, 42965.86328125,
51902.34375, 70721.609375, 94126.828125, 107016.71875, 132309.03125,
101159.71875, 139946.859375)), row.names = c(51L, 52L, 53L,
54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 119L, 120L, 121L, 122L,
123L, 124L, 125L, 126L, 127L, 128L, 129L), class = "data.frame")
我创建了以下函数来获取 5 年的平均增长率。p>
growth5<-function(x){
grorat<-(x/lag(x, k = 5))^(1/5)-1
return(grorat)}
在我像这样使用 dplyr 的 mutate 之后,
pwt <- pwt %>% group_by(code) %>% mutate(across(c(rgdpe:rgdpo), ~ growth5(.), .names = "{col}_grow"))
但是,正如您将看到的,我在新列(新变量)中只得到 0,并且在我预期的地方没有 NA。
非常感谢您提前!
【问题讨论】:
-
您好,请以适当的方式分享数据,阅读how-to-make-a-great-r-reproducible-example。在一个最小的例子中,从来不需要所有的数据。还要说明您使用的所有
library呼叫。 -
嗯。除了
q_gdp不在数据集中的错误之外,您的代码可以正常工作。我在会话中加载的唯一包是 dplyr。 -
亲爱的 stefan,非常感谢您。似乎与 lag() 存在冲突,因为我同时加载了 dplyr 和 stats 并且都使用了 lag()。现在几乎可以了,但是我在第一年只得到一个 NA 行,并且应该在前 4 年产生 NA 行。事实上,获得的增长率是不正确的。然而,在 pieterbons 的例子中,它完美地工作。有什么提示吗?