Корреляция между переменной в одном столбце - PullRequest
1 голос
/ 26 сентября 2019

У меня есть датафрейм df.Проблема в том, что категориальные переменные находятся в одном столбце, а значения - в другом столбце.Мне нужно построить корреляцию без преобразования набора данных.Вот это

   df
   Date             B      C
   2019-09-09     Cat1     2
   2019-09-10     Cat1     3
   2019-09-11     Cat1     5
   2019-09-09     Cat2     7
   2019-09-10     Cat2     9
   2019-09-11     Cat2     10  

, если вы внимательно наблюдаете, мне нужно построить график зависимости между значениями Cat1 и Cat2 в столбце C и датой.Есть ли способ?Категории в столбце 2 могут быть больше 2. Но как мы можем построить их, если переменные находятся в одном столбце?

Допустим, у нас есть датафрейм df, как показано ниже.В этом легко построить

   df
   Date               Cat1   Cat2
   2019-09-09          2        7
   2019-09-10          3        9 
   2019-09-11          5        10

. В этом случае мы можем использовать код ниже

  ggplot(df, aes(x=Cat1, y=Cat2))+geom_point()

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

С помощью пакета tidyr все должно быть довольно просто.Смотрите ниже:

library(tidyr)

df <- data.frame(Date = c("2019-09-09","2019-09-10","2019-09-11","2019-09-09","2019-09-10","2019-09-11"),
                         B = c(rep("Cat1",3),rep("Cat2",3)),
                         C = c(2,3,5,7,9,10))

df.tidy <- spread(df, key = B, value = C)

df.tidy

#           Date Cat1 Cat2
#   1 2019-09-09    2    7
#   2 2019-09-10    3    9
#   3 2019-09-11    5   10
0 голосов
/ 26 сентября 2019

Судя по вашим пояснениям в комментариях, кажется, это именно то, что вам нужно.

library(ggplot2)

ggplot(df, aes(x=Date, group = B)) + 
  geom_line(aes(y = C, color = B))

Необходимо указать способ группировки переменных, передав столбец с группами в аргумент group.Затем передайте значения y в функцию aes() в вызове geom_line().Вы можете добавить цвет линий на основе групп.

Просто обратите внимание, что это не корреляция, поэтому ваш вопрос вводит в заблуждение.

РЕДАКТИРОВАТЬ

Построить Cat1 против Cat2 без преобразования данных сложнее.Я не знаю, как это сделать без преобразования данных, но поскольку вы непреклонны в том, что это не то, что вам нужно, альтернативой является создание временной функции, в которой данные преобразуются внутри функции, а ggplot используется для преобразованных данных.в функцию и сюжет возвращается.Преобразованные данные определены только в области действия функции, поэтому они не будут находиться в глобальной среде

gg_group_point <- function(x, group, values){

  df <- x

  xy_key <- colnames(x[,group, drop = F])

  xy_val <- colnames(x[,values, drop = F])

  df_transformed <- spread(df, key = xy_key, value = xy_val)

  xpos <- colnames(df_transformed[, 2, drop = F])

  ypos <- colnames(df_transformed[, 3, drop = F])

  p <- ggplot(df_transformed, aes_string(x=xpos, y=ypos)) + geom_point()

  return(p)
}

Предоставить индекс столбца столбца с переменными оси x и y для аргумента группы, истолбец со значениями для аргумента значения.

df3 <- df[, c('B', 'Date', 'C')]

gg_group_point(df3, group = 1, values = 3)

Я переставил столбцы, чтобы убедиться, что это работает, даже если переменная группировки не находится во 2-м столбце.Единственное предостережение в том, что это работает, только если у вас есть две переменные.Что-то большее, чем это, вам потребуется несколько графиков xy или, возможно, граненый график.

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