gpt4 book ai didi

r - 如何使用 data.table 从两个不同的数据框中按 ID 进行汇总

转载 作者:行者123 更新时间:2023-12-05 05:39:55 24 4
gpt4 key购买 nike

我有多个数据集,我已经将它们合并到 R 中的一个摘要数据框中。我在最后一步,但我受阻了。

这是一个虚拟场景:想象两个数据帧 df1 和 df2

df1           df2
ID Make ID Max
1 A 1 2
1 B 2 3
2 A 3 5
2 B
2 B
2 C
3 B

我想为每个 ID 显示“Make”的所有唯一实例并将其附加到 df2生成的 df2 应如下所示:

df2
ID Max Make
1 2 A,B
2 3 A,B,C
3 5 B

我的尝试没有奏效。这是我得到的最接近的:

df2[df1
, ':=' (Make = paste(Make, collapse = ","))
, by = .EACHI
, on = .(ID = ID)]

ID Max Make
1: 1 2 B
2: 2 3 C
3: 3 5 B

感谢任何帮助。

最佳答案

两步过程可能更容易 - 即通过粘贴unique元素来总结“df1”数据Make列'ID' 并使用 df2 on 'ID' 列进行连接

library(data.table)
df2[df1[, .(Make = toString(unique(Make))), ID], on = .(ID)]
ID Max Make
<num> <num> <char>
1: 1 2 A, B
2: 2 3 A, B, C
3: 3 5 B

或者,如果我们想使用 .EACHI,而不是进行赋值 (:=),则将输出汇总到一个 list 中(或 .()

df1[df2, .(Max, Make = toString(unique(Make))), on = .(ID), by = .EACHI]
ID Max Make
<num> <num> <char>
1: 1 2 A, B
2: 2 3 A, B, C
3: 3 5 B

注意:这里我们假设两个数据集都是data.table对象

数据

df1 <- structure(list(ID = c(1, 1, 2, 2, 2, 2, 3), Make = c("A", "B", 
"A", "B", "B", "C", "B")), row.names = c(NA, -7L), class = c("data.table",
"data.frame"))

df2 <- structure(list(ID = c(1, 2, 3), Max = c(2, 3, 5)), row.names = c(NA,
-3L), class = c("data.table", "data.frame"))

关于r - 如何使用 data.table 从两个不同的数据框中按 ID 进行汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72563969/

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