R 带变异的索引

R 带变异的索引,r,mutate,R,Mutate,我有一个按国家划分的不平衡小组,如下所示: cname year disability_PC family_PC ... allFunctions_PC Denmark 1992 953.42 1143.25 ... 9672.43 Denmark 1995 1167.33 1361.62 ... 11002.45 Denmark 2000 1341 1470.54 ... 11200 Finland

我有一个按国家划分的不平衡小组,如下所示:

cname    year  disability_PC  family_PC ... allFunctions_PC
Denmark  1992    953.42         1143.25 ...   9672.43
Denmark  1995    1167.33        1361.62 ...   11002.45
Denmark  2000    1341           1470.54 ...   11200
Finland  1991    1095           955     ...   7164
Finland  1996    1067           1040    ...   7600 
等等,在更多的年份和国家。我想做的是计算每种类型的社会支出(残疾、家庭、所有功能)的移动索引

因此,我尝试了以下方法:

pdata %>% 
group_by(cname) %>% 
mutate_at(vars(disability_absPC, family_absPC, Health_absPC, oldage_absPC, unemp_absPC, housing_absPC, allFunctions_absPC),
 funs(chg = ((./lag(.))*100)))
代码似乎可以工作,因为R报告了前10列,并正确地表示“多了56行,多了13个变量”。但是,这些不会添加到数据帧中。我是说,打字

view(pdata)
变量不存在,就好像mutate命令没有创建这些变量一样。 我做错了什么


谢谢你的支持

我们可以使用一些
select\u helpers
来简化这个过程,而且
funs
也不推荐使用。我们可以使用
列表

library(dplyr)
pdata <- pdata %>% 
           group_by(cname) %>% 
           mutate_at(vars(ends_with('absPC')), list(chg = ~ ((./lag(.))*100))
库(dplyr)
pdata%
分组依据(cname)%>%
在(变量(以('absPC')结尾)、列表(chg=~(./滞后()*100))处进行变异


关于不创建变量的问题,基于OP的代码,输出不会分配给任何对象标识符,也不会更新原始对象(
我们可以使用一些
选择帮助程序使这更简单,而且
funs
也不推荐使用。在适当的情况下,我们可以使用
列表

library(dplyr)
pdata <- pdata %>% 
           group_by(cname) %>% 
           mutate_at(vars(ends_with('absPC')), list(chg = ~ ((./lag(.))*100))
库(dplyr)
pdata%
分组依据(cname)%>%
在(变量(以('absPC')结尾)、列表(chg=~(./滞后()*100))处进行变异


关于不创建变量的问题,基于OP的代码,输出不会分配给任何对象标识符或更新原始对象(
值就在那里,只要做
as.data.frame
。它来自
tibble
的打印选项值就在那里,只要做
as.data.frame
。它来自
tibble
的打印选项,与“ends_with”完美搭配,谢谢!(是的,我的缺点是缺少标识符)这与“以”结尾,谢谢!(是的,我的错是缺少标识符)