我有一个 800k+ 行重复(随机)值的 DF。对于每一行,我需要取一个值并找到具有相同值的新行的索引。例如“asd”——我还能在哪里看到它?不需要当前行的索引。
我当前的解决方案:子集一个 DF 并通过删除当前行创建一个临时框架/表。问题 - 每 1000 次迭代需要一分钟。所以 800+k 行需要我 13 个小时才能运行。有任何想法吗?谢谢!
在原始 DF(未子集)上运行 < 1 秒,但您可以想象它为我提供了当前行的索引。
编辑:我现实生活中的 DF 超过 1 列。下面的例子被简化了。我需要获取其他值为 的V1[1]
行号,然后对每一行重复 for等V1
V1[1]
V1[2]
library(fastmatch)
library(stringi)
set.seed(12345)
V1 = stringi::stri_rand_strings(800000, 3)
df0 = as.data.table(V1)
mapped = matrix("",nrow=800000)
print(Sys.time())
for (i in 1:1000) {
tmp_df = df0[-i,] #This takes very long time!!!
mapped[i] = fmatch(df0$V1[i],tmp_df$V1)
}
print(Sys.time())
View(mapped)