有没有办法绘制两个变量出现在 R 中的实例?
Posted
技术标签:
【中文标题】有没有办法绘制两个变量出现在 R 中的实例?【英文标题】:Is there a way to plot the instances that two variables appear in R? 【发布时间】:2021-12-15 04:24:20 【问题描述】:我有一个如下所示的数据集:
english math science history art geography
<fct> <fct> <fct> <fct> <fct> <fct>
1 1 1 0 1 1 0
2 0 0 0 1 0 1
3 1 0 1 0 0 1
4 0 1 0 1 1 0
5 1 1 0 0 0 0
6 1 1 1 0 1 1
7 1 1 0 0 1 1
8 1 1 0 0 0 1
9 0 0 0 1 0 0
10 1 0 1 1 1 0
11 1 0 0 1 1 0
我正在尝试计算整个数据框中出现两个变量的实例,例如:对于 5 个实例,数学和英语的值都为 1。
我可以使用此代码计算所有实例:,并且可以为所有主题执行此操作
sum(df$english==1 & df$math==1)
但是,我正在尝试创建一个类似于 graph 的图表;这可以在R中做到吗?我尝试过使用 ggplot 但不知道如何创建它?
数据框的代码是这样的:
structure(list(english = structure(c(2L, 1L, 2L, 1L, 2L, 2L,
2L, 2L, 1L, 2L, 2L), .Label = c("0", "1"), class = "factor"),
math = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
1L), .Label = c("0", "1"), class = "factor"), science = structure(c(1L,
1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L), .Label = c("0",
"1"), class = "factor"), history = structure(c(2L, 2L, 1L,
2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L), .Label = c("0", "1"), class = "factor"),
art = structure(c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L,
2L), .Label = c("0", "1"), class = "factor"), geography = structure(c(1L,
2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), .Label = c("0",
"1"), class = "factor")), row.names = c(NA, -11L), class = c("tbl_df",
"tbl", "data.frame"))
【问题讨论】:
【参考方案1】:实现您想要的结果的一个选项是通过widyr
包,它可以通过widyr::pairwise_count
轻松计算计数,并以可以通过ggplot2
轻松绘制的整洁数据格式返回结果:
-
为观察添加标识符变量
使用例如将您的数据帧转换为长或整齐的格式
tidyr::pivot_longer
过滤数据并计算计数
情节
library(widyr)
library(dplyr)
library(tidyr)
library(ggplot2)
dd <- d %>%
mutate(id = row_number()) %>%
pivot_longer(-id) %>%
filter(value == 1) %>%
pairwise_count(name, id)
ggplot(dd, aes(item1, item2)) +
geom_point(aes(size = n), color = "steelblue") +
geom_text(aes(label = n), show.legend = FALSE) +
scale_size_area(max_size = 10) +
guides(size = "none")
【讨论】:
效果很好,谢谢!以上是关于有没有办法绘制两个变量出现在 R 中的实例?的主要内容,如果未能解决你的问题,请参考以下文章