有没有办法绘制两个变量出现在 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 中的实例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在R中将两个直方图一起绘制?

有没有办法在两个栅格堆栈上应用PCA(具有相同的变量)

R - 在ggplot 2上将两个变量绘制为线条[重复]

使用ggplot在R中并排绘制两个分组变量

如何在 R 的 3D 图中从分类算法中绘制分区平面

有没有办法堆叠两个 tensorflow 数据集?