首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过满足一个条件,为R中的相同变量制作一个比例表

通过满足一个条件,为R中的相同变量制作一个比例表
EN

Stack Overflow用户
提问于 2019-09-05 23:36:06
回答 1查看 47关注 0票数 2

我有一个非常大的数据框,像这样,假设数据框中只有8个人,如下面的R代码所示

注意'df‘中的每一行代表一个单独的人

代码语言:javascript
运行
复制
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 (或数据框中的任何其他变量)作为“参考”

代码语言:javascript
运行
复制
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%),

另外,有没有像这样绘制图表的方法(如果这个问题没有得到回答,也可以,但如果有想法,我们将不胜感激)

EN

回答 1

Stack Overflow用户

发布于 2019-09-06 00:30:29

我们可以通过一些矩阵运算来实现这一点:

代码语言:javascript
运行
复制
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

至于绘图,热图可能是一种很好的方法。简单地说:

代码语言:javascript
运行
复制
gplots::heatmap.2(result, dendrogram = "none", Rowv = F, Colv = F)

为了获得更大的灵活性,我建议使用ggplot2This question should get you started

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57808819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档