gpt4 book ai didi

r - 基于无序的三列聚合一个数据框

转载 作者:行者123 更新时间:2023-12-03 23:34:21 24 4
gpt4 key购买 nike

我想做与此处发布的完全相同的事情:Aggregate a data frame based on unordered pairs of columns但是有 3 列而不是 2 列。

   X1   X2    X3   count
A B C 1
B A C 1
D N A 1
A D N 1
C B A 1
N D A 1
A D N 1

理想情况下,我希望拥有以下内容:

  X1    X2     X3    count
A B C 3
A D N 4

我已尝试调整代码,但无法使其正常工作,也没有找到使用 dplyr 和 data.table 的解决方法。

require(data.table)
DT <- data.table(DF)
DT.OUT <- DT[, list(size=sum(count)),
by=list(id1 = pmin(X1,X2,X3),id2 = c(X1,X2,X3)[!c(c(X1,X2,X3) %in% c(pmax(X1,X2,X3), pmin(X1,X2,X3)))] ,id3 = pmax(X1,X2,X3))]

最佳答案

一个选项是 meltdata.table

library(data.table)
unique(melt(DT[, rn := .I], id.var = c('rn', 'count'))[,
grp := toString(sort(unique(value))), rn], by = c("rn", "grp"))[,
.(count = sum(count)), grp]
# grp count
#1: A, B, C 3
#2: A, D, N 4

或者另一种选择是遍历行以进行 sort 然后按 sum

进行分组
DT[, c(sort(.SD), list(count = count)), 1:nrow(DT), 
.SDcols = X1:X3][, .(count = sum(count)), .(X1, X2, X3)]
# X1 X2 X3 count
#1: A B C 3
#2: A D N 4

关于r - 基于无序的三列聚合一个数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667045/

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