gpt4 book ai didi

r - 计算数据框中每个条目的出现次数

转载 作者:行者123 更新时间:2023-12-04 10:21:48 24 4
gpt4 key购买 nike

我有以下类型的数据框(这是简化示例):

id = c("1", "1", "1", "2", "3", "3", "4", "4")
bank = c("a", "b", "c", "b", "b", "c", "a", "c")
df = data.frame(id, bank)
df

id bank
1 1 a
2 1 b
3 1 c
4 2 b
5 3 b
6 3 c
7 4 a
8 4 c

在此数据框中,您可以看到某些 ID 有多个银行,即 id==1 , bank=c(a,b,c) .

我想从这个数据框中提取的信息是不同银行内的 id 和计数之间的重叠。

例如银行 a : 银行 a有两个人(唯一ID):1和4。对于这些人,我想知道他们还有哪些银行
  • 对于第 1 个人:银行 b 和 c
  • 对于第 4 个人:银行 c

  • 其他银行的总金额:3,其中,b = 1,c = 2。

    所以我想创建一种重叠表作为输出,如下所示:
    bank overlap amount
    a b 1
    a c 2
    b a 1
    b c 2
    c a 2
    c b 2

    最佳答案

    我花了一段时间才得到结果,所以我发布了它。不像 Ronak Shahs 那样性感,但结果相同。

    id = c("1", "1", "1", "2", "3", "3", "4", "4")
    bank = c("a", "b", "c", "b", "b", "c", "a", "c")
    df = data.frame(id, bank)

    df$bank <- as.character(df$bank)

    resultlist <- list()
    dflist <- split(df, df$id)

    for(i in 1:length(dflist)) {
    if(nrow(dflist[[i]]) < 2) {
    resultlist[[i]] <- data.frame(matrix(nrow = 0, ncol = 2))
    } else {
    resultlist[[i]] <- as.data.frame(t(combn(dflist[[i]]$bank, 2)))
    }
    }
    result <- setNames(data.table(rbindlist(resultlist)), c("bank", "overlap"))

    result %>%
    group_by(bank, overlap) %>%
    summarise(amount = n())

    bank overlap amount
    <fct> <fct> <int>
    1 a b 1
    2 a c 2
    3 b c 2

    关于r - 计算数据框中每个条目的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56837470/

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