我想制作一个条形图,其中包含两个时间点“之前”和“之后”的数据叠加。
在每个时间点,参与者都会被问到两个问题(“疼痛”和“恐惧”),他们会通过给出 1、2 或 3 的分数来回答。
我现有的代码很好地绘制了“之前”时间点的数据计数,但我似乎无法添加“之后”数据的计数。
这是我希望绘图在添加“之后”数据后的样子的草图,黑条代表“之后”数据:
我想在 ggplot2() 中绘制图,并且我尝试改编来自如何在 R 中叠加条形图的代码? 但我无法让它用于分组数据。
非常感谢!
#DATA PREP
library(dplyr)
library(ggplot2)
library(tidyr)
df <- data.frame(before_fear=c(1,1,1,2,3),before_pain=c(2,2,1,3,1),after_fear=c(1,3,3,2,3),after_pain=c(1,1,2,3,1))
df <- df %>% gather("question", "answer_option") # Get the counts for each answer of each question
df2 <- df %>%
group_by(question,answer_option) %>%
summarise (n = n())
df2 <- as.data.frame(df2)
df3 <- df2 %>% mutate(time = factor(ifelse(grepl("before", question), "before", "after"),
c("before", "after"))) # change classes and split data into two data frames
df3$n <- as.numeric(df3$n) …Run Code Online (Sandbox Code Playgroud) 我想基于变量(df$pet)的值创建三个新的数据帧,以便最终得到dfdogCorrect,dfcatCorrect和dfratCorrect.
我当前代码的问题是我无法使新数据框的命名起作用.我正在使用unique(df$pet),它将pet中的第一个独特元素分配给第一个新数据帧,而不管新数据帧的内容如何.
任何帮助你不胜感激.
初始点:
df <- data.frame(pet=c("dog","dog","dog","cat","cat","rat","rat","rat","rat"),relstatus=c(1,2,1,2,2,2,2,1,2),age=c(34,54,56,32,45,64,65,32,45), stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
期望的结果:
dfdogCorrect <- data.frame(pet=c("dog","dog","dog"),relstatus=c(1,2,1),age=c(34,54,56), stringsAsFactors = FALSE)
dfcatCorrect <- data.frame(pet=c("cat","cat"),relstatus=c(2,2),age=c(32,45), stringsAsFactors = FALSE)
dfratCorrect <- data.frame(pet=c("rat","rat","rat","rat"),relstatus=c(2,2,1,2),age=c(64,65,32,45), stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)
当前代码:
s <- setNames(split(df, df$pet), paste0("df", unique(df$pet)))
list2env(s, globalenv())
Run Code Online (Sandbox Code Playgroud) 我想在数据框中所有变量名称的前三个字符后插入下划线。任何帮助将非常感激。
当前数据框:
df1 <- data.frame("genCrc_b1"=c(1,1,1),"genprd"=c(1,1,1) ,"genopr_b1_b2"=c(1,1,1))
Run Code Online (Sandbox Code Playgroud)
所需的数据框:
df2 <- data.frame("gen_Crc_b1"=c(1,1,1),"gen_prd"=c(1,1,1) ,"gen_opr_b1_b2"=c(1,1,1))
Run Code Online (Sandbox Code Playgroud)
我的尝试:
gsub('^(.{3})(.*)$', "_", names(df1))
gsub('^(.{3})(.*)$', '\\_\\2', names(df1))
Run Code Online (Sandbox Code Playgroud)