R 中重复的函数执行重复行搜索。如果我们想删除重复项,我们只需要写入df[!duplicated(df),]
,重复项将从数据框中删除。
但是如何找到重复数据的索引呢?如果duplicated
在某行上返回 TRUE,则表示这是该行在数据框中的第二次出现,并且可以轻松获得其索引。如何获取该行第一次出现的索引?或者,换句话说,一个与重复行相同的索引?
我可以在 data.frame 上做一个循环,但我认为这个问题有一个更优雅的答案。
R 中重复的函数执行重复行搜索。如果我们想删除重复项,我们只需要写入df[!duplicated(df),]
,重复项将从数据框中删除。
但是如何找到重复数据的索引呢?如果duplicated
在某行上返回 TRUE,则表示这是该行在数据框中的第二次出现,并且可以轻松获得其索引。如何获取该行第一次出现的索引?或者,换句话说,一个与重复行相同的索引?
我可以在 data.frame 上做一个循环,但我认为这个问题有一个更优雅的答案。
这是一个例子:
df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1))
duplicated(df) | duplicated(df, fromLast = TRUE)
#[1] TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE TRUE
该函数duplicated(df)
确定原始数据中的重复元素。表示“fromLast = TRUE
应从反面考虑重复”。|
由于TRUE
其中至少一个中的 a 表示重复值,因此使用组合两个结果逻辑向量。
如果您使用的是带键的data.table,那么您可以使用以下优雅的语法
library(data.table)
DT <- data.table(A = rep(1:3, each=4),
B = rep(1:4, each=3),
C = rep(1:2, 6), key = "A,B,C")
DT[unique(DT[duplicated(DT)]),which=T]
打开包装
DT[duplicated(DT)]
子集那些重复的行。
unique(...)
仅返回重复行的唯一组合。这处理超过 1 个重复的任何情况(重复重复,例如三次重复等)
DT[..., which = T]
将重复的行与原始行合并,并which=T
返回行号(没有which = T
它只会返回数据)。
你也可以使用
DT[,count := .N,by = list(A,B,C)][count>1, which=T]