【发布时间】:2014-12-10 00:29:55
【问题描述】:
这与之前在 SO 中回答的问题略有不同。 (Unique on a dataframe with only selected columns)
该问题与我的唯一区别是我必须提及应保留重复项中的哪些特定行。我的行是我正在考虑的名称,例如提供一个子字符串来删除具有该子字符串的行,但我无法将其放入代码中。例如:如果重复行是 exm123 和 tre123,我想保留带有 tre 子字符串的行)
如果你们认为在 R 中没有任何子字符串有更简单的方法来做同样的事情,我很乐意学习替代方法。谢谢。
dat:
Index Name id1 id2
1 exm-9980 1 202183358
2 exm-53487 1 203186865
3 exm-tre10248 1 85537661
4 exm-7747 10 102827758
5 exm-29639 10 18289634
6 exm-76467 10 27436462
7 exm-tre7540 10 18289634
8 exm-4560589 10 74890584
9 vg-194357 11 102589148
10 exm-0867390 11 61110815
11 exm-IN3127 1 85537661
12 exm-tre2315 11 18632984
13 exm-12411 6 30332555
14 exm-128711 11 18632984
nm1 <- c('id1', 'id2')
indx <- duplicated(dat[,nm1])|duplicated(dat[,nm1],fromLast=TRUE)
df22=dat[!indx|(indx & grepl("^tre", dat$Name)),]
which(indx==T)
indx: 3,5,7,12.14,11,13
当我使用索引 13 的主数据中的 id1 和 id2 的值进行交叉检查时
f1=dat[dat$id1==6& dat$id2==30332555,]
f1 是 1 行的矩阵。如果它是重复的,它应该是第 2 行或更多行的矩阵。
我无法加载完整的数据,因为它超过了 100k 行。但我希望这将有助于以清晰的方式显示问题。
【问题讨论】:
-
请提供您的数据的一小部分样本,并显示您期望的结果。
-
@user2698508 假设是否有重复,并且它们都以
tre开头(如我的示例所示)。那么,你会保留哪一个? -
@user2698508 我使用之前的代码从你的新示例中得到了预期的结果
-
@user2698508 在新数据集中,
exm和trm在单个Name行中。在这里,哪一行应该在预期的输出中。 -
@user2698508 还有
grepl(^rs", dat$Name),我在名称列中找不到rs作为起始字符。