我有一个非常大的数据框,像这样,假设数据框中只有8个人,如下面的R代码所示
注意'df‘中的每一行代表一个单独的人
football <- c(1,1,1,1,0,0,0,0)
basketball <- c(1,1,0,0,0,0,0,1)
other <- c(1,0,0,0,0,0,0,0)
df<- data.frame(football, basketball, other)
我正在尝试获得一个类似这样的表,使用football (或数据框中的任何其他变量)作为“参考”
mytable <- matrix (c(1, 0.5, 0.25 ,0.66, 1, 0.33, 1, 1, 1), byrow=T, ncol=3)
colnames(mytable) <- c("football","basketball","other")
rownames(mytable) <- c("football","basketball","other")
在这种情况下,
8个人中有4个人踢足球:4个踢足球的人中有4个踢足球(100%),4个人中有2个足球运动员也打篮球(50%),4个足球运动员中有1个还从事其他运动(25%)。
8人中有3人打篮球:3人中有2人也踢足球(66%),3人中有3人打篮球(100%),3人中有1人还从事其他运动(33%)。
每8人中有1人从事其他运动:1人中有1人还会踢足球(100%),1人中有1人会打篮球(100%),1人中有1人会玩其他运动(100%),
另外,有没有像这样绘制图表的方法(如果这个问题没有得到回答,也可以,但如果有想法,我们将不胜感激)
发布于 2019-09-06 00:30:29
我们可以通过一些矩阵运算来实现这一点:
m = as.matrix(df)
t(m) %*% m / colSums(m)
# football basketball other
# football 1.0000000 0.5 0.2500000
# basketball 0.6666667 1.0 0.3333333
# other 1.0000000 1.0 1.0000000
至于绘图,热图可能是一种很好的方法。简单地说:
gplots::heatmap.2(result, dendrogram = "none", Rowv = F, Colv = F)
为了获得更大的灵活性,我建议使用ggplot2
。This question should get you started。
https://stackoverflow.com/questions/57808819
复制相似问题