【发布时间】:2018-11-20 18:44:26
【问题描述】:
foo <- data.table(x = 1:5/sum(1:5),
y = (-4):0/sum((-4):0),
z1 = 2:6/sum(2:6),
z2 = 2:6/sum(2:6))
假设我有foo 数据表(如上所述):
x y z1 z2
1: 0.06666667 0.4 0.10 0.10
2: 0.13333333 0.3 0.15 0.15
3: 0.20000000 0.2 0.20 0.20
4: 0.26666667 0.1 0.25 0.25
5: 0.33333333 0.0 0.30 0.30
如何有效地计算唯一列?在这种情况下只有 3 个。
请假设一般情况下:
-
foo始终是数据表而不是矩阵;尽管列始终是数字。 -
foo实际上很大,nrow > 20k and ncol > 100
是否可以在不制作额外数据副本的情况下做到这一点?
我目前的方法是apply 使用paste 为每列获取单个值,然后对结果执行length(unique(.))...
data.table::transpose()、data.table::uniqueN,也许还有其他一些朋友有什么魔法吗?
【问题讨论】:
-
快速优化:
uniqueN是一个导出函数,因此请使用它而不是length(unique())。 -
请不要在微数据集上进行基准测试。微秒基准不会告诉您它如何在真实数据集上扩展。
-
@DavidArenburg:我明白了……
标签: r data.table