r - 通过R中其他两列的成对组合计算一列的唯一值
问题描述
简而言之,我正在寻找一种方法来计算分析师在给定年份对公司的独特预测数量。
输入
dt <- data.table(CUSIP = c(1,1,1,1,2,2,2,2,2,2), Fdate = c("2000-12-31","2000-12-31","2001-12-31","2001-12-31","2000-12-31","2000-12-31","2000-12-31", "2001-12-31", "2001-12-31", "2001-12-31"), Analys = c(7649, 9845, 44283, 7649, 9845, 37856, 63528, 9845, 88254, 88254))
看起来一个问题已经问过通过 R 中另一列的成对组合来计算一列的唯一值, 但是我无法让它工作。
使用该问题的描述解决方案,结果不是我想要的。因为它计算并显示了 fdate 和分析师的组合。但是,我想要给定公司和预测年份的唯一分析师数量的结果。
通过 r 中另一列的成对组合计算一列的唯一值的解决方案的结果:
dt.cj <- merge(dt, dt, by ="Fdate", all = T, allow.cartesian = T)
dt.res <- dt.cj[Analys.x < Analys.y, .(cnt = length(unique(CUSIP.x))),by = .(Fdate, Analys.x, Analys.y)]
CUSIP = 公司的唯一 ID。Fdate = 预测所依据的日期。分析 = 分析师的 ID。
期望的输出:
output <- data.table(Reg.ID = c(1,1,2,2), Location = c("2000-12-31","2001-12-31"), Count = c(2,2,3,2))
解决方案
dt[, .(Count = uniqueN(Analys)), by = .(CUSIP, Fdate)]
# CUSIP Fdate Count
# 1: 1 2000-12-31 2
# 2: 1 2001-12-31 2
# 3: 2 2000-12-31 3
# 4: 2 2001-12-31 2
您在问题中链接的示例过于复杂,因为它使用单列的成对组合——它必须以各种可能的方式将一列与其自身匹配。您希望按组进行独特的观察,而您的组恰好由 2 列定义。这是一个简单得多的问题。
推荐阅读
- c++ - 构建中不存在libgit2依赖pcre
- mysql - 如何使用 mysql 在谷歌云中授予用户权限?
- html - Node Express 服务器卡在加载中
- sql - SQLite多表的sql查询
- python - 用值 Python-Pandas 替换空单元格
- c# - 解析中间件中的请求标头属性,用于特定路由 - ASP.NET CORE
- matlab - 如何在 MATLAB 中读取 .mtx 文件矩阵以计算特征值和特征向量?
- javascript - 无法获取输入元素的值
- .net - 具有事件驱动架构但没有事件溯源的 CQRS
- node.js - supervisord 没有在停止命令上杀死所有生成的节点进程