2
给一个大的(NROWS> 5,000,000+)数据帧,甲,与串行名称和不相交的集合的列表(N = 20,000),乙,其中每个组由行名称A,通过唯一值创建代表集合的向量的最佳方法是什么?B?
插图
下面是说明该问题的一个示例:
# Input
A <- data.frame(d = rep("A", 5e6), row.names = as.character(sample(1:5e6)))
B <- list(c("4655297", "3177816", "3328423"), c("2911946", "2829484"), ...) # Size 20,000+
期望的结果将是:
# An index of NA represents that the row is not part of any set in B.
> A[,"index", drop = F]
d index
4655297 A 1
3328423 A 1
2911946 A 2
2829484 A 2
3871770 A NA
2702914 A NA
2581677 A NA
4106410 A NA
3755846 A NA
3177816 A 1
朴素尝试
这样的事情可以用以下方法来实现。
n <- 0
A$index <- NA
lapply(B, function(x){
n <<- n + 1
A[x, "index"] <<- n
})
问题
然而,这是不合理的慢(几个小时)由于多次索引和不是很R-式的或典雅。
如何快速高效地生成期望的结果?
谢谢。优雅而快捷! – Nixuz