【发布时间】:2015-01-23 14:38:13
【问题描述】:
给定 R 中的 data.table,我想找到与前一行相反的行。例如:
>head(DT)
V1 V2
1 nameA nameB
2 nameA nameC
3 nameB nameA
4 nameB nameF
5 nameN nameP
6 nameP nameN
对于row 1,代码应返回row 3。对于row 5,代码应返回row 6。最终,我想删除“反转”的行。
真实数据集有 50 万行和 2 列。目前我正在使用这段代码,它可以完成这项工作:
require(foreach)
require(doMC)
registerDoMC(4)
rm.idx <- c()
rm.idx <- foreach(i=1:nrow(DT), .combine = 'c')%dopar%{
if (!(i %in% rm.idx)) which(DT[i,1] == DT[,2] & DT[i,2] == DT[,1])
}
代码“返回”一个向量 (rm.idx),其中包含那些行的索引,这些行是前一行的反转版本。
但是,对于相对“小”的数据集大小来说,需要很长时间(超过 30 分钟)。我经常发现 R 有一些调整或一些功能可以更快地完成这个技巧(或者,我的代码效率不高)。因此,我想知道是否有人知道找到与前一行相反的行的更快方法。
提前感谢您的宝贵时间。
【问题讨论】:
-
它只需要是前一行,还是它之前的任何行?
-
在速度方面,here 上的答案与您的答案相比如何?
-
您只有两列,还是可能有更多?
-
@AndrewTaylor。谢谢,这里的答案很快就对我有用。 stackoverflow.com/questions/22756392/…
-
试试
DT[!duplicated(paste(pmin(V1, V2),pmax(V1,V2)))]
标签: r data.table reverse