首页 > 解决方案 > R:分类变量的计数频率(以日期为条件)

问题描述

我有三列“名称”、“成功假人”和“日期”。对于每个名称,我想检查该名称的过去成功。

因此,例如,如果名称“Peter”已经出现了 3 次,那么每次我想计算“Peter”的数量,“Success ==1”和 Date 之前发生过。

我需要为“过去的成功”列获取的输出示例。

Name    Success Date   Past Success
David      1    2018    1
Peter      0    2017    3
Peter      1    2016    2
David      1    2017    0
Peter      1    2015    1
Peter      0    2010    1
Peter      1    2005    0
Peter     NA    2004    0

有什么办法可以快速做到吗?

我也需要它非常快,因为我的数据很大。

我所做的是根据名称和日期对数据进行排序,并根据之前的 100 个观察值检查每个观察值(因为名称的最大频率为 100)。

请告知是否有更好的方法来做到这一点。

标签: rcountfrequency

解决方案


试试这个数据表方法:

library(data.table)
data <-data.table(Name = rep(c("David","Peter","David","Peter"), c(1,2,1,4)),
                  Success = c(1,0,1,1,1,0,1,NA),
                  Date = c(2018,2017,2016,2017,2015,2010,2005,2004)
                  )
data <- data[order(Date)]
data[Success == 1,"Past Success":= cumsum(Success), by = 'Name']

推荐阅读