Попарный график на двух последовательных данных? - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть два фрейма данных (164 наблюдения по 5766 переменным). Один фрейм данных, Scores, имеет число от 0 до 1 для каждого наблюдения (дата) и каждой переменной (компании). Другой называется Returns и имеет номер от -1 до 10 для каждого наблюдения (дата) и каждой переменной (компания). Я пытаюсь составить точечный график каждой пары (Scores, Returns) для каждой даты и компании. Наборы данных соответствуют 1: 1 (то есть в них нет пробелов).

В настоящее время я пытаюсь сгенерировать пары для подачи на участок. Сейчас у меня есть:

Scores<-read.csv("~/Scores.csv")
Returns<-read.csv("~/Returns.csv")
head(Scores)
# A tibble: 6 x 5,766
  `C-DATE`    C1    C2    C3    C4    C5    C6    C7    C8    C9   C10
     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1        1     0     0     0     0     0     0     0     0     0     0
2        2     0     0     0     0     0     0     0     0     0     0
3        3     0     0     0     0     0     0     0     0     0     0
4        4     0     0     0     0     0     0     0     0     0     0
5        5     0     0     0     0     0     0     0     0     0     0
6        6     0     0     0     0     0     0     0     0     0     0
 head(Returns)
# A tibble: 6 x 5,766
  `C-DATE`    C1    C2    C3    C4    C5    C6    C7    C8    C9   C10
     <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1        1     0     0     0     0     0     0     0     0     0     0
2        2     0     0     0     0     0     0     0     0     0     0
3        3     0     0     0     0     0     0     0     0     0     0
4        4     0     0     0     0     0     0     0     0     0     0
5        5     0     0     0     0     0     0     0     0     0     0
6        6     0     0     0     0     0     0     0     0     0     0

Затем я создаю пустую матрицу того же размера, что и эти два кадра данных, и пытаюсь записать пару c (Scores, Returns) в каждый экземпляр матрицы :

plotpairs<-matrix(nrow=nrow(Scores),ncol=ncol(Scores))
for(j in 1:nrow(plotpairs)){
  for(k in 1:ncol(plotpairs)){
    plotpairs[j,k]<-c(Scores[j,k],Returns[j,k])
  }
}

Это возвращает следующую ошибку:

Error in vectors[j, k] <- c(Scores[j, k], Returns[j, k]) : 
  number of items to replace is not a multiple of replacement length

Что приводит к сбою, если все они имеют одинаковый размер, и есть более простой способ создать попарную диаграмму рассеяния на двух фреймах данных?

Спасибо!

1 Ответ

0 голосов
/ 25 февраля 2020

Допустим, вы начинаете с этих двух таблиц:

library(tidyverse)

set.seed(1)

df1 <- 
  tibble(
    date = 1:6, 
    C1 = rnorm(6), 
    C2 = rnorm(6)
  )
df2 <- 
  tibble(
    date = 1:6, 
    C1 = rnorm(6), 
    C2 = rnorm(6)
  )

df1
   date     C1     C2
  <int>  <dbl>  <dbl>
1     1 -0.626  0.487
2     2  0.184  0.738
3     3 -0.836  0.576
4     4  1.60  -0.305
5     5  0.330  1.51 
6     6 -0.820  0.390

df2
# A tibble: 6 x 3
   date      C1      C2
  <int>   <dbl>   <dbl>
1     1 -0.621   0.821 
2     2 -2.21    0.594 
3     3  1.12    0.919 
4     4 -0.0449  0.782 
5     5 -0.0162  0.0746
6     6  0.944  -1.99  

Один из способов избежать l oop - собрать точки в длинный формат, где один фрейм данных представляет значения X и имеет уникальные строки для C -DATE и C#, с другим фреймом данных, представляющим значения Y, за которым следует объединение в парах C -DATE и C#:

df_joined <- 
  df1 %>% 
  gather(key = key, value = x, C1:C2) %>% 
  left_join(
    df2 %>% gather(key = key, value = y, C1:C2),
    by = c("date", "key")
  ) 

df_joined
    date key        x       y
   <int> <chr>  <dbl>   <dbl>
 1     1 C1    -0.626 -0.621 
 2     2 C1     0.184 -2.21  
...

Тогда Вы можете передать это в ggplot, чтобы показать пары:

ggplot(df_joined, aes(x = x, y = y)) +
  geom_point()
...