我正在尝试计算跨组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
答案 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
快。