简而言之,我正在寻找一种方法来计算公司给定年份的分析师的独特预测数。
输入
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))
似乎已经问过一个问题Count unique values of a column by pairwise combinations of another column in 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 =预测所基于的日期。 Analys =分析师的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))
答案 0 :(得分:1)
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列定义。这是一个简单得多的问题。