首页 > 解决方案 > 根据组的“DNA”更快地为每个组分配唯一 ID

问题描述

我有一个问题,我需要根据整个组的特征对记录进行分组,但是我目前的解决方案对于我正在使用的数据集的大小来说太慢了。

示例数据集:

在此处输入图像描述

A   B   C
555 A1 K500
555 B2 H650
556 A1 K600
556 B2 H700

因此,我需要创建一个新列,为每个组提供有关该组的更多信息,而不仅仅是 A 列中的信息(例如 555)。

示例输出:

在此处输入图像描述

我当前的解决方案如下所示,但对于我的数据集的大小来说需要很长时间:

DNA <- function(x) {
Subset = filter(
    df,
    A==x)

Subset$Concat = paste(Subset$B,Subset$C,sep="")
toString(Subset$Concat)
}

df$DNA= mapply(DNA, df$A)

标签: r

解决方案


dplyr中,类似:

library(dplyr)

df %>%
group_by(A) %>%
mutate(
D = paste(paste(B, C, sep = " "), collapse = " ")
)

data.table

library(data.table)

setDT(df)[, D := paste(paste(B, C, sep = " "), collapse = " "), by = A]

编辑:我重新运行了您的示例,并看到您生成的 DNA 柱的结构略有不同。

如果你想得到这样一个列,你只需用 和 替换里面dplyrDNA = paste(paste0(B, C), collapse = ", ")内部DNA := paste(paste0(B, C), collapse = ", ")部分data.table

microbenchmark由于您说您对速度感兴趣(单位为毫秒),因此我也将其运行了一遍:

DNA function: 4.013901

dplyr: 1.664197

data.table: 0.7746959


推荐阅读