r - 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)。
请告知是否有更好的方法来做到这一点。
解决方案
试试这个数据表方法:
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']
推荐阅读
- c# - 为已部署的 Windows 应用程序 C# 更新系统?
- f# - seq<'a> 类型与 Collections.Generic.IEnumerable<'a> 类型不兼容
- php - 如果值存在php mysql如何检查行
- javascript - 如何在 TinyMCE 编辑器中以编程方式添加 html 标签?
- javascript - 下载表单 URL 并在 javascript 中上传到 Google Drive
- cassandra - Cassandra 3.11 SSTableLoader 机制
- python - 如何拥有一个混合类型的 numpy 数组?
- assembly - 程序集 qemu-system-i386:尝试在 RAM 外执行代码
- dart - 在 Dart 中获取泛型列表的子类型
- google-app-engine - 是否应根据 Google App Engine 的请求创建 Firestore 客户端?