如何将以下数据集转换为长格式并制作条形图

how to transfer the following dateset to longformat and make the bar plot

我得到的数据集如下

year<-seq(2000, 2010,2)
erate1<-runif(6,0,1)/6
erate2<-runif(6,0,1)/6
erate3<-runif(6,0,1)/6
erate4<-runif(6,0,1)/6
barplotdf<-data.frame(erate1,erate2,erate3,erate4,year)

女性位置将是 2000、2002、2004....

周五的仓位将是 rate1,rate2,

在 Whosebug 上,建议提供您自己的尝试来解决您的问题。不过看你之前的问题,我看你一般都是这样的,而且这个问题很明确,所以回答一下:

library(tidyverse)
year<-seq(2000, 2010,2)
erate1<-runif(6,0,1)/6
erate2<-runif(6,0,1)/6
erate3<-runif(6,0,1)/6
erate4<-runif(6,0,1)/6
barplotdf<-data.frame(erate1,erate2,erate3,erate4,year)

barplotdf %>% 
  pivot_longer(cols = -c(year)) %>% 
  mutate(sex = ifelse(year %in% c(2000, 2002, 2004), "Female", "Male"),
         day = case_when(name == "erate1" ~ "Fri",
                         name == "erate2" ~ "Sat",
                         name == "erate3" ~ "Sun",
                         name == "erate4" ~ "Thur")) %>% 
  ggplot(aes(x = day, y = value, fill = day)) +
  geom_col() +
  facet_wrap("sex") +
  scale_y_continuous(labels = scales::percent_format(),
                     name = "Percent") +
  scale_fill_discrete(label = c(1, 2, 3, 4))

编辑

要添加百分比,您需要 'format' 数据框(延长轴心,添加基于年份的“性别”变量,并将“率*”更改为“日”),然后在中创建标签第二步:

# Load libraries
library(tidyverse)

# Create the dataframe
year<-seq(2000, 2010,2)
erate1<-runif(6,0,1)/6
erate2<-runif(6,0,1)/6
erate3<-runif(6,0,1)/6
erate4<-runif(6,0,1)/6
barplotdf<-data.frame(erate1,erate2,erate3,erate4,year)

# 'First step': format the dataframe to 'feed into' ggplot
formatted_barplotdf <- barplotdf %>% 
  pivot_longer(cols = -c(year)) %>%
  mutate(sex = ifelse(year %in% c(2000, 2002, 2004), "Female", "Male"),
         day = case_when(name == "erate1" ~ "Fri",
                         name == "erate2" ~ "Sat",
                         name == "erate3" ~ "Sun",
                         name == "erate4" ~ "Thur"))

# 'Second step': create a new variable called "perc"
labels_df <- formatted_barplotdf %>% 
  group_by(sex, day) %>% 
  summarise(perc = round(sum(value), 4))

# Plot the dataframe
ggplot(formatted_barplotdf, aes(x = day, fill = day, y = value)) +
  geom_col() +
  facet_wrap("sex") +
  scale_y_continuous(labels = scales::percent_format(),
                     name = "Percent") +
  scale_fill_discrete(label = c(1, 2, 3, 4)) +
# Add the labels from "labels_df"
  geom_text(data = labels_df, aes(y = perc,
                                 label = paste(perc * 100, "%", sep = ""),
                                 vjust = -0.5))