r - 共现变量对的交叉制表

标签 r dplyr

我有一个数据框,其中包含代表一些变量的列。每行对应一个实例。给定实例中特定变量的存在由 1 表示,不存在由 0 表示。

# Construct dataframe.
df <- structure(list(var.1 = c(0, 1, 0, 0, 0, 1, 0), 
                     var.2 = c(1, 1, 0, 0, 1, 0, 0), 
                     var.3 = c(1, 1, 0, 1, 0, 0, 1), 
                     var.4 = c(0, 0, 0, 1, 1, 1, 1)), 
                class = "data.frame", row.names = c(NA, -7L))

> df
#   var.1 var.2 var.3 var.4
# 1     0     1     1     0
# 2     1     1     1     0
# 3     0     0     0     0
# 4     0     0     1     1
# 5     0     1     0     1
# 6     1     0     0     1
# 7     0     0     1     1

我想知道如何(最好使用 dplyr)创建一个矩阵来计算所有变量对之间的共现频率。结果应如下所示:

> result.df
#       var.1 var.2 var.3 var.4
# var.1    NA     1     0     0
# var.2     1    NA     2     1
# var.3     0     2    NA     2
# var.4     1     1     2    NA

谢谢。

最佳答案

由于列是二进制 1 或 0,您也可以通过将列相乘来实现此目的,只有当两列都等于 1 时,结果才为 1,然后求和

out <- sapply(df, function(x) colSums(df*x))
diag(out) <- NA
out
#       var.1 var.2 var.3 var.4
# var.1    NA     1     1     1
# var.2     1    NA     2     1
# var.3     1     2    NA     2
# var.4     1     1     2    NA

或者使用矩阵乘法

out <- t(df) %*% as.matrix(df)
diag(out) <- NA
out

#       var.1 var.2 var.3 var.4
# var.1    NA     1     1     1
# var.2     1    NA     2     1
# var.3     1     2    NA     2
# var.4     1     1     2    NA

关于r - 共现变量对的交叉制表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57869831/

相关文章:

python - rpy2 - 如何将数据帧作为 RData 文件保存到磁盘?

r - 从 R 中的其他数据帧更新列中的某些值

R dplyr 方法在自己的函数中

r - 如果 R 中的列中不存在两个条件,则删除数据行

r - 应用函数来组合列

r - 如何使用 dplyr 获取具有多个样本的地点的物种丰富度和丰度

r - 用交互项引导 lmer

r - 用于配对 Wilcoxon 检验的带有 p 值的动画 fiddle /箱线图

R - 使用 dplyr mutate 和 if_else 期望单个值时出错

从宽变量组 reshape 到长变量组