2017-07-17 64 views
0

我有一个包含70个列变量的数据集,每个变量都是0-1个虚拟变量和3500个观察值。我期待看到一个变量中“成功”的观察结果与另一个变量相匹配的频率。换句话说,obs 1在变量1中有一个成功的虚拟变量,它在变量2中也有成功的频率,等等。我发现如何创建一个矩阵表来显示只有两列的情况下的交互,但是我找不到涉及多列的任何内容。理想情况下,id喜欢在70个变量和70个变量的交互矩阵中呈现。下面是数据组的一个想法:运行多个变量之间的交互矩阵

Dat A B C D XX 1 1 1 1 XY 0 1 0 1 XZ 0 0 1 1

输出IM希望为将是:

Out A B C D 
A 0 1 1 1 
B  0 1 2 
C   0 2 
D    0 

显示的时间(B中的数(A,B)是一个配对, C)是一个配对等。

我已经尝试使用table()命令以及as.matrix,但它似乎需要将数据组织为两列,并且在引用多个列变量时无法理解数据。我对R相当陌生,所以我很抱歉如果我的问题不清楚或可能很简单。

任何帮助表示赞赏。谢谢

+0

请提供一个小的可重复的数据集,包括你有什么到目前为止已经试过。 – Jimbou

+0

很抱歉提出这些问题。我添加了更多信息以使事情更清晰。 – nghallmark

回答

1

以下是如何创建无限大小的相关矩阵。首先创建您的数据集的可重复的例子...

dat <- matrix(sample(0:1, size = 700, replace = TRUE), ncol = 70) 
dat <- data.frame(dat) 

然后计算相关...

dat <- cor(dat) 

然后在视觉上绘制的相关...

library(corrplot) 
corrplot(dat, method = "square") 

A massive correlation matrix with colored squares

您还可以使用数字而不是颜色绘制相关关系...

corrplot(dat, method = "number") 

A massive correlation matrix with numbers

显然,你会想在出版物在使用前巧妙这些图表。 corrplot为图表外观提供了大量选项。

+0

这是有帮助的,但不是我一直在寻找的东西,我认为我的问题还不够清楚。我补充说明一些。 – nghallmark

0

你可以试试:

res <- apply(combn(2:ncol(df), 2), 2, function(x, y) sum(rowSums(y[, x]) == 2), df) 
m <- diag(x=0, ncol(df)-1) 
m[upper.tri(m)] <- res 
m[lower.tri(m)] <- NA 
dimnames(m) <- list(colnames(df)[-1], colnames(df)[-1]) 
    A B C D 
A 0 1 1 1 
B NA 0 1 2 
C NA NA 0 2 
D NA NA NA 0