纵向数据集中的累积变量构造

拉斐尔

问题:我想构造一个变量来衡量一个人年纵向数据集中的累积工作经验。该问题适用于各种纵向数据集,并且可能以这种累积方式构造许多变量(例如,孩子的数量,累积的教育程度,累积的度假花费等)。

情况:我有一个很大的纵向数据集,其中每一行构成一个人年。该数据集包含成千上万的人(变量“ ID”)及其一生(变量“年龄”),从而形成一个约120万行的数据框。一个变量表示一个人每年每个人工作了多少个月(变量“工作”)。例如,当丹15岁时,他工作了3个月。

     ID age work
1   Dan  10    0
2   Dan  11    0
3   Dan  12    0
4   Dan  13    0
5   Dan  14    0
6   Dan  15    3
7   Dan  16    5
8   Dan  17    8
9   Dan  18    5
10  Dan  19   12
11 Jeff  20    0
12 Jeff  16    0
13 Jeff  17    0
14 Jeff  18    0
15 Jeff  19    0
16 Jeff  20    0
17 Jeff  21    8
18 Jeff  22   10
19 Jeff  23   12
20 Jeff  24   12
21 Jeff  25   12
22 Jeff  26   12
23 Jeff  27   12
24 Jeff  28   12
25 Jeff  29   12

我现在想构造一个累积的工作经验变量,该变量将x年的值添加到x + 1年。目的是要知道每个人在每个年龄段中在整个载体中工作了多少个月。该变量应看起来像“ cumwork”。

     ID age work cumwork
1   Dan  10    0       0
2   Dan  11    0       0
3   Dan  12    0       0
4   Dan  13    0       0
5   Dan  14    0       0
6   Dan  15    3       3
7   Dan  16    5       8
8   Dan  17    8      16
9   Dan  18    5      21
10  Dan  19   12      33
11 Jeff  20    0       0
12 Jeff  16    0       0
13 Jeff  17    0       0
14 Jeff  18    0       0
15 Jeff  19    0       0
16 Jeff  20    0       0
17 Jeff  21    8       8
18 Jeff  22   10      18
19 Jeff  23   12      30
20 Jeff  24   12      42
21 Jeff  25   12      54
22 Jeff  26   12      66
23 Jeff  27   12      78
24 Jeff  28   12      90
25 Jeff  29   12     102

一个糟糕的解决方案:我可以使用以下简单循环构造这样的累积变量:

# Generate test data set
x=data.frame(ID=c(rep("Dan",times=10),rep("Jeff",times=15)),age=c(10:20,16:29),work=c(rep(0,times=5),3,5,8,5,12,rep(0,times=6),8,10,rep(12,times=7)),stringsAsFactors=F)

# Generate cumulative work experience variable
x$cumwork=x$work

for(r in 2:nrow(x)){
  if(x$ID[r]==x$ID[r-1]){
    x$cumwork[r]=x$cumwork[r-1]+x$cumwork[r]
  }
}

但是,我的数据集有120万行,遍历每一行的效率非常低,运行此循环将花费数小时。有什么才华横溢的程序员对如何最有效地构建这种累积度量有建议吗?

提前谢谢了!

最好,拉斐尔

A5C1D2H2I1M1N2O1R2T1

ave对于这些类型的任务很方便。您要使用的功能是cumsum

x$cumwork <- ave(x$work, x$ID, FUN = cumsum)
x
#      ID age work cumwork
# 1   Dan  10    0       0
# 2   Dan  11    0       0
# 3   Dan  12    0       0
# 4   Dan  13    0       0
# 5   Dan  14    0       0
# 6   Dan  15    3       3
# 7   Dan  16    5       8
# 8   Dan  17    8      16
# 9   Dan  18    5      21
# 10  Dan  19   12      33
# 11 Jeff  20    0       0
# 12 Jeff  16    0       0
# 13 Jeff  17    0       0
# 14 Jeff  18    0       0
# 15 Jeff  19    0       0
# 16 Jeff  20    0       0
# 17 Jeff  21    8       8
# 18 Jeff  22   10      18
# 19 Jeff  23   12      30
# 20 Jeff  24   12      42
# 21 Jeff  25   12      54
# 22 Jeff  26   12      66
# 23 Jeff  27   12      78
# 24 Jeff  28   12      90
# 25 Jeff  29   12     102

但是,鉴于您的数据规模,我也强烈建议您使用“ data.table”包,该包还使您可以使用方便的语法:

library(data.table)
DT <- data.table(x)
DT[, cumwork := cumsum(work), by = ID]

本文收集自互联网,转载请注明来源。

如有侵权,请联系debugcn@gmail.com 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

分层采样数据集并平均训练数据集中的变量

来自分类Dev

如何在纵向数据集中进行Winsorize(或移除单变量离群值)

来自分类Dev

从SPSS中的数据集中删除所有变量

来自分类Dev

使用Shiny Inputs在数据集中创建新变量

来自分类Dev

数据集中哪些变量在ID中是常量

来自分类Dev

列出数据框子集中的所有变量(及其比例)

来自分类Dev

因子变量的累积和

来自分类Dev

在纵向数据集中发生事件后删除后续观察

来自分类Dev

(纵向数据)为每个ID创建具有最后值的新变量

来自分类Dev

数据集中的分类变量之间的相关性

来自分类Dev

根据其他数据集中的其他值创建变量

来自分类Dev

分层采样数据集并平均训练数据集中的变量

来自分类Dev

变量在数据集中多次出现的概率

来自分类Dev

计算面板数据集中分类变量的更改次数

来自分类Dev

将行转换为数据集中的变量

来自分类Dev

SAS数据集中的累积频率

来自分类Dev

如何在纵向数据集中进行Winsorize(或去除单变量离群值)

来自分类Dev

用于纵向数据的R条件变量

来自分类Dev

按组查找数据集中每个变量的差异(相减)

来自分类Dev

使用dplyr独立地获取数据集中的子集变量

来自分类Dev

使用Shiny Inputs在数据集中创建新变量

来自分类Dev

使用协变量绘制和建模纵向数据

来自分类Dev

如何使用PROC EXPAND填写面板(纵向)数据集中的时间序列观测值?

来自分类Dev

创建一个在纵向面板数据中合并滞后值的变量

来自分类Dev

如何在Rstudio中删除大型数据集中的变量?

来自分类Dev

重塑数据集中的多个变量

来自分类Dev

使用数据集中的现有变量创建变量

来自分类Dev

在r中将具有时间变量的纵向数据从宽格式转换为长格式

来自分类Dev

迭代循环以获得每个不同日期变量的数据帧变量的累积总和(非聚合)

Related 相关文章

  1. 1

    分层采样数据集并平均训练数据集中的变量

  2. 2

    如何在纵向数据集中进行Winsorize(或移除单变量离群值)

  3. 3

    从SPSS中的数据集中删除所有变量

  4. 4

    使用Shiny Inputs在数据集中创建新变量

  5. 5

    数据集中哪些变量在ID中是常量

  6. 6

    列出数据框子集中的所有变量(及其比例)

  7. 7

    因子变量的累积和

  8. 8

    在纵向数据集中发生事件后删除后续观察

  9. 9

    (纵向数据)为每个ID创建具有最后值的新变量

  10. 10

    数据集中的分类变量之间的相关性

  11. 11

    根据其他数据集中的其他值创建变量

  12. 12

    分层采样数据集并平均训练数据集中的变量

  13. 13

    变量在数据集中多次出现的概率

  14. 14

    计算面板数据集中分类变量的更改次数

  15. 15

    将行转换为数据集中的变量

  16. 16

    SAS数据集中的累积频率

  17. 17

    如何在纵向数据集中进行Winsorize(或去除单变量离群值)

  18. 18

    用于纵向数据的R条件变量

  19. 19

    按组查找数据集中每个变量的差异(相减)

  20. 20

    使用dplyr独立地获取数据集中的子集变量

  21. 21

    使用Shiny Inputs在数据集中创建新变量

  22. 22

    使用协变量绘制和建模纵向数据

  23. 23

    如何使用PROC EXPAND填写面板(纵向)数据集中的时间序列观测值?

  24. 24

    创建一个在纵向面板数据中合并滞后值的变量

  25. 25

    如何在Rstudio中删除大型数据集中的变量?

  26. 26

    重塑数据集中的多个变量

  27. 27

    使用数据集中的现有变量创建变量

  28. 28

    在r中将具有时间变量的纵向数据从宽格式转换为长格式

  29. 29

    迭代循环以获得每个不同日期变量的数据帧变量的累积总和(非聚合)

热门标签

归档