R中的聚合时间过长

时间:2016-10-06 20:12:00

标签: r aggregate

我正在尝试计算跨组y的x的唯一值。

这是功能:

aggregate(x~y,z[which(z$grp==0),],function(x) length(unique(x)))

这花了太长时间(大约6个小时,还没有完成)。我不想停止处理,因为我今晚必须完成这项工作。

by()花了太长时间

任何想法出了什么问题以及如何缩短处理时间~1小时? 我的数据集有300万行和16列。

输入数据帧z

x y grp 
1 1 0
2 1 0
1 2 1
1 3 0 
3 4 1

我想得到每个y的唯一(x)计数,其中grp = 0

更新:使用@ eddi的优秀答案。我有

                  x                 y
     1:           2                 1
     2:           1                 3

我知道如何快速将其概括为每个值y的x数? 因此,它将是

Number of x    y
5              1
1              3

2 个答案:

答案 0 :(得分:3)

你走了:

library(data.table)
setDT(z) # to convert to data.table in place

z[grp == 0, uniqueN(x), by = y]
#   y V1
#1: 1  2
#2: 3  1

答案 1 :(得分:0)

library(dplyr)
z %>% 
  filter(grp == 0) %>%
  group_by(y) %>%
  summarize(nx = n_distinct(x))) 

dplyr方式,但可能不如data.table快。