gpt4 book ai didi

r - 匹配/分组重复行(索引)

转载 作者:行者123 更新时间:2023-12-03 13:56:08 26 4
gpt4 key购买 nike

如何有效地匹配/分组重复行的索引?

假设我有以下数据集:

set.seed(14)
dat <- data.frame(mtcars[sample(1:5, 14, TRUE), ])[sample.int(14), ]
rownames(dat) <- NULL
dat

## mpg cyl disp hp drat wt qsec vs am gear carb
## 1 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 3 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 4 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 5 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 6 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 7 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 8 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 9 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## 10 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 11 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## 12 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## 13 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## 14 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4


我可以使用找到所有重复的索引(包括第一个重复)

which_duplicated <- function(dat){
which(duplicated(dat) | duplicated(dat[nrow(dat):1, ])[nrow(dat):1])
}

which_duplicated(dat)

## [1] 1 2 3 4 5 6 7 8 9 10 11 13


但我希望能够将这些索引进行匹配,如下所示:

list(
c(2, 13),
c(1, 4, 5, 6, 9),
c(3, 7, 8, 10, 11)
)


我如何有效地做到这一点?

最佳答案

这是使用“ data.table”的可能性:

library(data.table)
as.data.table(dat)[, c("GRP", "N") := .(.GRP, .N), by = names(dat)][
N > 1, list(list(.I)), by = GRP]
## GRP V1
## 1: 1 1,4,5,6,9
## 2: 2 2,13
## 3: 3 3, 7, 8,10,11


基本思想是创建一个将其他列“分组”的列(使用 .GRP)以及一个计算有多少重复行的列(使用 .N),然后过滤具有多个重复行的任何内容,然后将“ GRP”列放入 list

关于r - 匹配/分组重复行(索引),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34314490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com