【问题标题】:Generate a differences of a unique observations accross a date range [duplicate]在日期范围内生成独特观察的差异[重复]
【发布时间】:2021-08-07 10:15:58
【问题描述】:

小伙伴们,

我有以下数据框。

obj <- data.frame (occ= c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
Date = c("1990-01", "1990-01", "1990-01", "1990-01", "1990-02", "1990-02", "1990-02", "1990-02", "1990-03", "1990-03", "1990-03", "1990-03", "1990-04", "1990-04", "1990-04", "1990-04"),
                   emp_value = c(33, 0, 55, 44, 0, 50, 70, 80, 91, 32, 32, 22, 11, 31, 42, 51)
)

我想做以下事情:

我想生成一个变量,它获取不同日期之间每个唯一职业 (occ) 的 emp_value 差异。

我想要的数据框是

obj <- data.frame (occ= c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4),
               Date = c("1990-01", "1990-01", "1990-01", "1990-01", "1990-02", "1990-02", "1990-02", "1990-02", "1990-03", "1990-03", "1990-03", "1990-03", "1990-04", "1990-04", "1990-04", "1990-04"),
               emp_value = c(33, 0, 55, 44, 0, 50, 70, 80, 91, 32, 32, 22, 11, 31, 42, 51), 
               emp_diff = c(0, 0, 0, 0, -33, 50, 15, 36, 91, -18, -38, -48, -69, -70, -1, 10)

)

请注意,我的真实数据框包含数千个值和数百个不同的职业。此外,并非每个职业都出现在每个日期内。

非常感谢!

【问题讨论】:

  • 如果缺少一个日期会怎样?你的 data.frame 是按日期排序的吗?
  • 是的,它是按日期排序的。只有日期内的职业(变量 occ)才能丢失。

标签: r


【解决方案1】:

你可以使用dplyr:

library(dplyr)
obj %>%
  group_by(occ) %>%
  mutate(emp_diff = emp_value - lag(emp_value, default = 0))

【讨论】:

  • 感谢您的留言!这几乎就是我所需要的,我只需要将 lag(emp_diff, default = 0) 替换为 lag(emp_value, default = 0)。谢谢大佬!
  • 啊...我的错误。更正了。
  • 如果缺少某个事件,则此事件将取两个连续日期之间的差异。如果缺少一个事件,则减去例如 1900-01-011900-01-03
猜你喜欢
  • 2019-01-30
  • 1970-01-01
  • 2014-12-17
  • 2023-04-11
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2014-09-07
相关资源
最近更新 更多