r - 如何从长格式数据框中计算成对计数表

标签 r dataframe

我有一个包含 id (主键)和 featureCode (分类变量)列的“长格式”数据框。每条记录都有 1 到 9 个分类变量值。例如:

id  featureCode
5   PPLC
5   PCLI
6   PPLC
6   PCLI
7   PPL
7   PPLC
7   PCLI
8   PPLC
9   PPLC
10  PPLC

我想计算每个特征代码与其他特征代码一起使用的次数(标题的“成对计数”)。在这个阶段,每个特征代码的使用顺序并不重要。我设想结果将是另一个数据框,其中行和列是特征代码,单元格是计数。例如:
      PPLC  PCLI  PPL
PPLC  0     3     1
PCLI  3     0     1
PPL   1     1     0

不幸的是,我不知道如何执行这个计算,并且在搜索建议时我画了一个空白(我怀疑主要是因为我不知道正确的术语)。

最佳答案

这是类似于@mrdwab 的 data.table 方法

如果 featureCode 是一个 character 它将效果最好

library(data.table)

DT <- data.table(dat)
# convert to character
DT[, featureCode := as.character(featureCode)]
# subset those with >1 per id
DT2 <- DT[, N := .N, by = id][N>1]
# create all combinations of 2
# return as a data.table with these as columns `V1` and `V2`
# then count the numbers in each group
DT2[, rbindlist(combn(featureCode,2, 
      FUN = function(x) as.data.table(as.list(x)), simplify = F)), 
    by = id][, .N, by = list(V1,V2)]


     V1   V2 N
1: PPLC PCLI 3
2:  PPL PPLC 1
3:  PPL PCLI 1

关于r - 如何从长格式数据框中计算成对计数表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13176741/

相关文章:

python - 如何在箱线图中显示 Pandas DataFrame 的最后一行

python - 如何过滤数据帧的最后 8 小时?

从一维 data.frame 中删除行并将其保留为 data.frame

python pandas 奇怪的多行索引,但不是一行

python - 简化 Pandas 中的 bool 索引条件

基于三列删除数据框中的行

r - 安装 "gradethis"软件包以检查 "learnr"中的代码

r - 结合 split() 和 cumsum()

r - 仅调用列名的一部分的函数参数 (ggplot)

sql - 使用 quantmod 在 R 中定制新的交易策略