我正在try 构建类似于下图的条形图,其中显示在X轴上的变量和填充变量都是多个响应变量,即每行/被调查者可以 Select 全部或其中一个选项.

An example of what I would like to get

我的数据集的一个片段,其中我希望在x轴上有HNV变量,并由PROVISION_IN和REGINGING_IN变量填充.它们都是伪变量,我只想获取表示变量"存在/正值"的"1"值:

structure(list(HNV_grasslands = c(1L, 0L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L), HNV_arable = c(1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 
1L, 1L, 1L), HNV_permanent_crop = c(1L, 1L, 1L, 0L, 0L, 1L, 1L, 
1L, 1L, 1L, 1L), HNV_mosaic = c(1L, 0L, 1L, 0L, 0L, 0L, 1L, 1L, 
1L, 0L, 1L), Provisioning_IN = c(0L, 0L, 0L, 1L, 1L, 0L, 1L, 
1L, 0L, 0L, 0L), Regulating_IN = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 0L)), row.names = 10:20, class = "data.frame")

到目前为止,我设法使用此代码和以下来自堆栈溢出中其他帖子的示例创建了HNV的条形图:

hnvf2 <-hnvf %>%
  select(HNV_grasslands, HNV_arable, HNV_permanent_crop, HNV_mosaic)

hnvf2 %>%
  pivot_longer(cols= everything(), 
               names_to = "HNV",
               values_to = "Value") %>%
  filter(Value == "1") %>%
  ggplot(aes(x= HNV)) +
  geom_bar( ,fill="turquoise")

What I was able to do so far

现在,我想用PROFILING_IN和REGRANGING_IN的计数来"填充"这些条形图中的每一个,但我try 的所有编码都不起作用.我是R的新手,如果您能帮忙,我将不胜感激!

推荐答案

您可以使用第二个pivot_longer来整理您的数据集:

library(tidyr)
library(dplyr, warn = FALSE)
library(ggplot2)

hnvf2 <- hnvf %>%
  pivot_longer(
    cols = starts_with("HNV"),
    names_to = c("HNV"),
    names_prefix = "HNV_",
    values_to = "value1"
  ) |>
  pivot_longer(
    cols = ends_with("_IN"),
    names_to = c("IN"),
    values_to = "value2",
    names_pattern = "^(.*)_IN"
  ) |>
  filter(value1 == 1, value2 == 1) |>
  select(-value1, -value2) 

hnvf2 |>
  ggplot(aes(x = HNV)) +
  geom_bar(aes(fill = IN))

R相关问答推荐

从具有随机模式的字符串中提取值

根据固定值范围在tible中添加新行

找出疾病消失的受试者

汇总数据表中两个特定列条目的值

在RStudio中堆叠条形图和折线图

使用R中的正则表达式将一列分割为多列

R:从geom_ol()中删除轮廓并导出为pdf

如何在R中平滑地绘制线图(不拟合)?

Geom_Hline将不会出现,而它以前出现了

将多个列值转换为二进制

如何移除GGPlot中超出与面相交的任何格网像元

如何平滑或忽略R中变量的微小变化?

如果条件匹配,则使用Mariate粘贴列名

R中治疗序列的相对时间指数

R仅当存在列时才发生变异

使用geom_sf跨越日期线时的闭合边界

禁用时,SelecizeInput将变得不透明

从矩阵创建系数图

在一个multiplot中以非对称的方式在R中绘制多个图

打印的.txt文件,将值显示为&Quot;Num&Quot;而不是值