R 检查data.table中的哪些行相同

R 检查data.table中的哪些行相同,r,data.table,R,Data.table,我需要一个解决方案,告诉我哪些行是相同的,但我找不到一个聪明的解决方案一个没有一堆复杂循环的解决方案。我更喜欢data.table解决方案。 我想要的是一个具有相同条目的行号的列表 例如: library(data.table) Data <- data.table(A = c("a", "a", "c"), B = c("A", "A", "B")) 这里有一些又快又脏的东西: Data[, .(.I, .GRP), by = .(A, B)][

我需要一个解决方案,告诉我哪些行是相同的,但我找不到一个聪明的解决方案一个没有一堆复杂循环的解决方案。我更喜欢data.table解决方案。 我想要的是一个具有相同条目的行号的列表

例如:

library(data.table)
Data <- data.table(A = c("a", "a", "c"), 
                   B = c("A", "A", "B"))

这里有一些又快又脏的东西:

Data[, .(.I, .GRP), by = .(A, B)][, list(split(I, GRP))]$V1
可简化为:

Data[, .(list(.I)), by = .(A, B)]$V1

这里有一些又快又脏的东西:

Data[, .(.I, .GRP), by = .(A, B)][, list(split(I, GRP))]$V1
可简化为:

Data[, .(list(.I)), by = .(A, B)]$V1

这是我的解决方案,直到sindri_baldur提出了更好的解决方案:

Data.unique <- unique(Data)
Data.unique[, G := .I]
Data[, I := .I]
Data.full <- 
  merge(Data,
        Data.unique,
        by = c("A", "B"))

Data.full %>% 
  split(by = "G") %>% 
  map(~ .x[, I])


这是我的解决方案,直到sindri_baldur提出了更好的解决方案:

Data.unique <- unique(Data)
Data.unique[, G := .I]
Data[, I := .I]
Data.full <- 
  merge(Data,
        Data.unique,
        by = c("A", "B"))

Data.full %>% 
  split(by = "G") %>% 
  map(~ .x[, I])


这真是太棒了,我想知道为什么我直到现在才知道。非常感谢你!这是我现在使用的最后一个代码:Data[,…I,.GRP,.A,B]]>%splitby=GRP%>%mapI@TobiSonne很好,你知道.GRP,但是你也可以不用它。看更新的帖子。那真的很棒,我想知道为什么我直到现在才知道.GRP。非常感谢你!这是我现在使用的最后一个代码:Data[,…I,.GRP,.A,B]]>%splitby=GRP%>%mapI@TobiSonne很好,你知道.GRP,但你也可以不用它。请参阅更新的帖子。