【问题标题】:Growth Rate Per Row每行增长率
【发布时间】:2020-05-19 22:31:52
【问题描述】:

我正在研究一个福利工资补贴计划的数据集,其中每个工人的工资结构如下:

df <- structure(list(wage_1990 = c(13451.67, 45000, 10301.67, NA, NA, 
8726.67, 11952.5, NA, NA, 7140, NA, NA, 10301.67, 7303.33, NA, 
NA, 9881.67, 5483.33, 12868.33, 9321.67), wage_1991 = c(13451.67, 
45000, 10301.67, NA, NA, 8750, 11952.5, NA, NA, 7140, NA, NA, 
10301.67, 7303.33, NA, NA, 9881.67, 5483.33, 12868.33, 9321.67
), wage_1992 = c(13451.67, 49500, 10301.67, NA, NA, 8750, 11952.5, 
NA, NA, 7140, NA, NA, 10301.67, 7303.33, NA, NA, 9881.67, NA, 
12868.33, 9321.67), wage_1993 = c(NA, NA, 10301.67, NA, NA, 8750, 
11958.33, NA, NA, 7140, NA, NA, 10301.67, 7303.33, NA, NA, 9881.67, 
NA, NA, 9321.67), wage_1994 = c(NA, NA, 10301.67, NA, NA, 8948.33, 
11958.33, NA, NA, 7140, NA, NA, 10301.67, 7303.33, NA, NA, 9881.67, 
NA, NA, 9321.67), wage_1995 = c(NA, NA, 10301.67, NA, NA, 8948.33, 
11958.33, NA, NA, 7140, NA, NA, 10301.67, 7303.33, NA, NA, 9881.67, 
NA, NA, 9321.67), wage_1996 = c(NA, NA, 10301.67, NA, NA, 8948.33, 
11958.33, NA, NA, 7291.67, NA, NA, 10301.67, 7303.33, NA, NA, 
9881.67, NA, NA, 9321.67)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L))

我想做以下事情: 1-创建一个变量,显示每个工人的工资年增长率或缺乏。

我面临的实际问题是,每个观察都排成一行,而第一个工人在 1990 年加入该计划,其他人可能在 1993 年或 1992 年加入。因此,有没有办法应用增长率根据每个工人工作的具体年份,而不是对所有观察结果应用通用增长公式?

My expected output for each row would be having a new column

      average wage growth rate
1-         15%
2-         9%
3-         12%

【问题讨论】:

  • 请使用dput 而不是str
  • 谢谢,有帮助吗?
  • 数据框中的三列长度不同。你能解释一下吗?

标签: r dataframe dplyr data.table tidyverse


【解决方案1】:

我无法使用您的数据,因为您的数据变量的长度不同。因此,我获取了您的基本数据并创建了两个相同长度的变量。为了简洁和更好地解释这个答案,我还将变量的数量减少到两个最重要的项目:(补贴长度和工资 1990)。最后,我删除了您的 NA 并将其替换为值 0。

第一步:创建两个长度相等的向量的data.frame 第二步:使用 dplyr 包中的函数来组织数据(过滤器、变异、 安排) 第三步:使用绘图显示数据,以揭示数据中的任何结构。我使用的数据不同,但这些数据确实揭示了情节中的一些结构。

此代码序列成功创建了一种方法来生成您正在搜索的输出。要进一步检查您的数据,您需要在 df 中包含更多变量,并使用各种 dplyr 函数执行进一步分析。

library(dplyr)
library(ggplot2)
sub <- c(110, 69, 370, 21, 77, 392, 355, 21, 27, 245, 21, 42)                   
wage <- c(13451.67, 45000.00, 10301.67, 0, 0, 8726.67, 11952.50, 0, 15700, 5100, 0, 500)

df <- data.frame(sub, wage)     # equal sized data vectors
df

c <- df %>% filter(df$wage > 0) %>% mutate(valu = wage / sub)   # mutate to shrink the y axis 
c                                    # to print the df

c2 <- c %>% arrange(desc(valu))                 # sort 
c2                                              # print df

ggplot(c2, aes(sub, valu))+                      # plot df
    geom_line()

【讨论】:

  • 非常感谢,这真的很有帮助!我已经修复了我之前帖子中的一些错误,希望它有助于重现数据。
  • 很高兴能够帮助并引导您朝着正确的方向前进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2019-05-05
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多