我有一个包含 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/