Могу ли я построить значения для подмножеств друг против друга в r? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть данные для нейрокогнитивного исследования.Мы измеряем результат тремя слегка различающимися опросами с одинаковым диапазоном возможных баллов, которые может получить участник.У меня есть данные в длинном формате - т.е. у меня есть три строки для каждого участника и переменные points и outcome.Переменная outcome указывает, какой тип съемки использовался в данной строке (scd_gb, scd_rb или scd_ab) для измерения точек.

    id outcome points
    1  scd_gb   20
    1  scd_rb   15
    1  scd_ab   3
    2  scd_gb   6
    2  scd_rb   18
    2  scd_ab   15

Я хотел бы создать точечный графикгде у меня scd_gb на оси x и scd_gb & scd_rb на оси y, каждый из которых имеет свой цвет.

Итак, у меня два вопроса: во-первых, могу ли я построить подмножества друг против друга или я преобразовал данные в широкоформатный формат?Во-вторых (вообще), я могу построить одну переменную против двух других?

Я попробовал следующий код, который возвращает ошибку.

    library(ggplot2)
    ggplot(SCD_long , aes(x = points(subset(SCD_long, outcome %in% c("scd_gb"))), 
    y = points(subset(SCD_long, outcome %in% c("scd_rb" , "scd_ab"))))) +
        geom_point(aes(color = outcome), alpha = .5)   

    Error: Aesthetics must be either length 1 or the same as the data (606): colour, x, y
In addition: Warning messages:
1: In data.matrix(x) : NAs introduced by coercion
2: In data.matrix(x) : NAs introduced by coercion
3: In data.matrix(x) : NAs introduced by coercion
4: In data.matrix(x) : NAs introduced by coercion

Я думаю, что оба вопроса могут быть решены путем обработки данных.Поскольку я новичок в R, мне интересно, насколько он гибок и где я могу получить требуемый график без изменения формата моих данных.

Большое спасибо,

Хана

1 Ответ

0 голосов
/ 19 октября 2018

Да, я думаю, что расширение ваших данных было бы хорошим подходом.Вот один из способов сделать это, который я применил к длинному формату подмножества фрейма данных iris.

like_your_data <- structure(list(points = c(5.1, 4.9, 4.7, 4.6, 7, 6.4, 6.9, 5.5, 
6.3, 5.8, 7.1, 6.3), outcome = structure(c(1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("setosa", "versicolor", 
"virginica"), class = "factor"), participant = c(1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -12L), .Names = c("points", 
"outcome", "participant"))

Сначала я делаю версию, которая является просто сетозой (эквивалентной вашему scd_gb).Затем я присоединяюсь к версии, которая исключает сетозу.Это приводит к добавлению значений для других в одном столбце и их типа опроса в другом.Это будет хорошо работать с ggplot, так как мы можем сопоставить тип опроса с цветом.

like_your_data %>%
  filter(outcome == "setosa") %>% # Equiv to scd_gb
  left_join(like_your_data %>% 
              filter(outcome != "setosa"), by = "participant") %>%
  ## Output at this point:
  # A tibble: 8 x 5
  #   points.x outcome.x participant points.y outcome.y 
  # <dbl> <fct>           <int>    <dbl> <fct>     
  # 1      5.1 setosa              1      7   versicolor
  # 2      5.1 setosa              1      6.3 virginica 
  # 3      4.9 setosa              2      6.4 versicolor
  ggplot(aes(points.x, points.y, color = outcome.y)) + geom_point()

enter image description here

...