列 R 中的自动累积计算

Posted

技术标签:

【中文标题】列 R 中的自动累积计算【英文标题】:auto cumulative calculation in a column R 【发布时间】:2014-07-22 06:56:30 【问题描述】:

我有如下数据集

 >df
  id time  cycle
  1   0    1
  1   5    NA
  2   0    1
  2   10   NA
  2   20   NA
  3   0    0
  3   2    NA
  3   5    NA
  3   8    NA
  3   15   NA
  4   0    1
  ......

我想让所有NA 自动累积到下一个 ID,如下所示:

 >df.new
  id time  cycle
  1   0    1
  1   5    2
  2   0    1
  2   10   2
  2   20   3
  3   0    1
  3   2    2
  3   5    3
  3   8    4
  3   15   5
  4   0    1
  ......

应该有一种简单的方法可以在 R 中对其进行编码。请分享您的想法。谢谢!

【问题讨论】:

【参考方案1】:
df$cycle <- with(df, ave(cycle, id, FUN=seq_along))
df$cycle
 #[1] 1 2 1 2 3 1 2 3 4 5 1

或者

sequence(tabulate(df$id)) #if IDs are in order
# [1] 1 2 1 2 3 1 2 3 4 5 1

【讨论】:

【参考方案2】:

dplyr

require(dplyr)
df %>% group_by(id) %>% mutate(cycle = seq_along(id))

  id time cycle
1   1    0     1
2   1    5     2
3   2    0     1
4   2   10     2
5   2   20     3
6   3    0     1
7   3    2     2
8   3    5     3
9   3    8     4
10  3   15     5
11  4    0     1

【讨论】:

【参考方案3】:

data.table

library(data.table)
setDT(df)[, cycle := seq_len(.N), by = id]

#     id time cycle
#  1:  1    0     1
#  2:  1    5     2
#  3:  2    0     1
#  4:  2   10     2
#  5:  2   20     3
#  6:  3    0     1
#  7:  3    2     2
#  8:  3    5     3
#  9:  3    8     4
# 10:  3   15     5
# 11:  4    0     1

【讨论】:

以上是关于列 R 中的自动累积计算的主要内容,如果未能解决你的问题,请参考以下文章

R中的贴现累积和

R 中的 Weibull 参数估计,同时考虑 X(时间)和 Y(累积观察)

在 Excel 中计算同一单元格中的累积和

如何使用 dplyr 将累积列添加到 R 数据框?

将 Weibull 累积分布拟合到 R 中的质量传递数据

如何在R中的一个向量中累积添加值