首页 > 解决方案 > 通过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))

标签: r

解决方案


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 列定义。这是一个简单得多的问题。


推荐阅读