我有一个数据框架,在一定的持续时间内,按行显示的财务数据很少,我想计算新列或新数据框中每一行的增长率,我正在处理的数据看起来会有些变化像这样
df.new <- t(freeny.x) # Example dataframe
我想计算每个项目的增长率,即“滞后季度收入”,“价格指数”,“收入水平”,“市场潜力”
如果数据位于以下示例中的列中,我可以这样做
df <- data.frame(date=paste(rep(2000:2017, each=4),"Q",rep(1:4, 18)), GDP= cumsum(sample(c(-0.5, 3), 72, TRUE)))
df <- df %>% mutate(change=(GDP-lag(GDP,1))/lag(GDP,1)*100)
df
如何使用df.new进行操作,请求专家帮助
答案 0 :(得分:1)
为简单起见,我只使用了数据帧的前6列,然后我们就可以这样做
(df[, 2:ncol(df)] - df[,-ncol(df)])/df[,-ncol(df)] * 100
# [,1] [,2] [,3] [,4] [,5]
#lag quarterly revenue -0.045473 -0.011260 0.267194 -0.020987 1.072278
#price index -0.165606 -0.270726 -0.082313 -0.968717 -0.315935
#income level 0.076961 0.095098 0.160175 0.169507 0.244088
#market potential 0.026215 0.031603 0.024658 0.019260 0.017715
如果您需要带有n-1
的第一列,则会返回NA
列,您可以cbind
cbind(NA, (df[, 2:ncol(df)] - df[,-ncol(df)])/df[,-ncol(df)] * 100)
为确保计算正确,请从第一行获取前两个值
(8.7924 - 8.7964)/8.7964 * 100
#[1]-0.045473
在最终输出的第1行第1列中给出相同的值,如图所示。
数据
df <- df.new[, 1:6]
df
# [,1] [,2] [,3] [,4] [,5] [,6]
#lag quarterly revenue 8.7964 8.7924 8.7914 8.8149 8.8130 8.9075
#price index 4.7100 4.7022 4.6894 4.6856 4.6402 4.6255
#income level 5.8211 5.8256 5.8311 5.8405 5.8504 5.8646
#market potential 12.9699 12.9733 12.9774 12.9806 12.9831 12.9854