如何将以下数据集转换为长格式并制作条形图
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))
我得到的数据集如下
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))