【问题标题】:Count unique values of a column by pairwise combinations of two other columns in R [duplicate]通过R中其他两列的成对组合计算一列的唯一值[重复]
【发布时间】:2019-06-19 04:41:41
【问题描述】:

简而言之,我正在寻找一种方法来计算分析师对特定年份的公司预测的唯一数量。

输入

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 = 预测所依据的日期。分析 = 分析师的 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


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

    【讨论】:

    • 你也可以用uniqueN代替length(unique(...
    • 非常感谢您的解决方案。这正是我正在寻找的! @Markus 使用 uniqueN 运行代码的时间比没有运行代码的时间要长。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多