R - Barplot, где одно подмножество переменной является заливкой, а одно подмножество является осью Y? - PullRequest
0 голосов
/ 02 мая 2018

Я хочу построить xExp и yExp на оси x, с Yes / Nos в качестве залитой заливки, а xDur, yDur в качестве оси y. Это возможно? Опыт = опыт и Дур = продолжительность.

Это то, что я недавно попробовал:

ggplot(md1,aes(variable,value,fill=str_detect("Exp")))+
geom_bar(stat="identity")

Я растопил фрейм данных и отфильтровал его, и теперь он выглядит так, как показано ниже. У меня гораздо больше значений Exp и Dur, чем это, имеет ли смысл просто хранить их как отдельные столбцы?

md1 <- md %>% 
filter(str_detect(variable, paste(c("Exp","Dur"),collapse = '|')))

Subject variable    value
1   xExp    Yes
2   xExp    No
3   xExp    Yes
4   xExp    Yes
5   xExp    No
1   xDur    2
2   xDur    NA
3   xDur    1
4   xDur    10
5   xDur    NA
1   yExp    No
2   yExp    No
3   yExp    Yes
4   yExp    Yes
5   yExp    No
1   yDur    NA
2   yDur    5
3   yDur    8
4   yDur    2
5   yDur    NA

Спасибо за любую помощь! Я искал здесь и не мог найти именно то, что мне нужно, но, возможно, я искал не ту вещь.

1 Ответ

0 голосов
/ 02 мая 2018
txt <- tibble::tribble(
  ~Subject,~variable,~value,
           1,   "xExp"   , "Yes",
            2,   "xExp"  ,  "No",
           3 ,  "xExp"   , "Yes",
           4 ,  "xExp"   , "Yes",
            5  , "xExp"  ,  "No",
             1,   "xDur" ,   "2",
            2 ,  "xDur"  ,  "NA",
             3,   "xDur" ,   "1",
            4 ,  "xDur"  ,  "10",
            5 ,  "xDur"  ,  "NA",
            1 ,  "yExp"  ,  "No",
            2 ,  "yExp"  ,  "No",
           3  , "yExp"   , "Yes",
           4  , "yExp"  ,  "Yes",
            5 ,  "yExp"  ,  "No",
            1 ,  "yDur"  ,  "NA",
             2 ,  "yDur"  ,  "5",
             3 ,  "yDur" ,   "8",
             4 ,  "yDur"  ,  "2",
            5  , "yDur"   , "NA"
  )

Интересно, это то, что вы ищете

library(tidyr)
library(dplyr)
library(ggplot2)    

df <- txt %>% 
  mutate(variable=gsub("([[:lower:]])([[:upper:]][[:lower:]])", "\\1 \\2", variable)) %>% 
  separate(variable, into=c("xy", "what")) %>% 
  spread(what, value) %>% 
  readr::type_convert() 

df
#> # A tibble: 10 x 4
#>    Subject xy      Dur Exp  
#>  *   <dbl> <chr> <int> <chr>
#>  1       1 x         2 Yes  
#>  2       1 y        NA No   
#>  3       2 x        NA No   
#>  4       2 y         5 No   
#>  5       3 x         1 Yes  
#>  6       3 y         8 Yes  
#>  7       4 x        10 Yes  
#>  8       4 y         2 Yes  
#>  9       5 x        NA No   
#> 10       5 y        NA No   

Таким образом, график будет выглядеть так

ggplot(df)+
  geom_col(aes(x=xy, y=Dur, fill=Exp))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...