给定 R 中某些条件的累积频率

cumulative frequency given certain conditions in R

我是 R 的新手,如果 ID 相同但不同 date.Also,我真的不知道如何计算一行的累计出现次数,如果第一个日期出现不止一次,它不应计入第 2 行和第 3 行的第一个 attempt.Look,这就是为什么我要构建的列称为 "count" 并且等于零。 "count"表示该id出现的次数,但遵循以下两条规则:

1.If 第一次出现Id,赋0。例如,对于 Id 1,尽管该 Id 的第一个日期有两个不同的寄存器,但 "count" 等于零。

2.For 下一个 Id 1 出现(Id1 的第 3 行)它有不同的日期,这就是 "count" 等于 2 的原因。因为 01/01/2018 Id1 出现了两次。

这是 DT,我要查找的结果在 "count" 列中:

我们可以使用 dplyrgroup_by id 和 return 0 作为第一个 date else return 的出现次数第一 date

library(dplyr)

df %>%
  group_by(id) %>%
  mutate(count = ifelse(date == date[1L], 0, sum(date == date[1L])))

#     id   date       count
#   <dbl> <fct>      <dbl>
#1     1 01/01/2018     0
#2     1 01/01/2018     0
#3     1 02/01/2018     2
#4     2 03/02/2018     0
#5     2 04/04/2018     1

或使用具有类似逻辑的基数 R ave

as.numeric(with(df, ave(date, id, FUN = function(x) 
           ifelse(x == x[1L], 0, sum(x == x[1L])))))
#[1] 0 0 2 0 1

数据

df <- data.frame(id = c(1, 1, 1, 2, 2), date = c("01/01/2018", "01/01/2018", 
     "02/01/2018", "03/02/2018", "04/04/2018"), stringsAsFactors = FALSE)

带有 data.table 的选项,我们将 'data.frame' 转换为 'data.table' (setDT(df)),按 'id' 分组,创建 'count'作为逻辑向量(date == first(date))的sum,然后将每个'id'的'count'的第一行更改为0

library(data.table)
setDT(df)[,  count := sum(date == first(date)), id]
df[df[, .I[1], id]$V1, count := 0][]
#   id       date count
#1:  1 01/01/2018     0
#2:  1 01/01/2018     2
#3:  1 02/01/2018     2
#4:  2 03/02/2018     0
#5:  2 04/04/2018     1

数据

df <- data.frame(id = c(1, 1, 1, 2, 2), date = c("01/01/2018", "01/01/2018", 
 "02/01/2018", "03/02/2018", "04/04/2018"), stringsAsFactors = FALSE)