ggplot для нескольких значений в одной строке

#r

#r

Вопрос:

У меня есть фрейм данных с несколькими значениями в одной строке

 index price

1   1000,2000,3000

2   2000,500
  

Фрейм данных содержит 12 строк, и не все price строки имеют одинаковую длину. Я хочу построить график index vs price с index помощью вдоль оси x и price вдоль оси y. У меня есть следующий код-

 ggplot(data_m,
   aes(x = 1:12,
       y = data_m$price))
  

Я получаю сообщение об ошибке- Error: Aesthetics must be either length 1 or the same as the data (12): y

Как мне отобразить каждое значение в столбце цены?

Комментарии:

1. Привет, @Misha, вы захотите получить свои данные в tidy формате. Смотрите здесь: vita.had.co.nz/papers/tidy-data.pdf где каждый столбец содержит только 1 значение в строке.

Ответ №1:

Возможно, вы ищете это. Вам нужно изменить данные, а затем искать стратегию для построения графика, как указано @TheSciGuy. Здесь tidyverse используется подход separate_rows() для разделения значений в ваших строках, а затем full_join() для сжатия с нужным вам индексом. Далее код:

 library(tidyverse)
#Data and plot
df %>% separate_rows(price,sep=',') %>%
  mutate(price=as.numeric(price)) %>%
  full_join(data.frame(index=1:12)) %>%
  ggplot(aes(x=factor(index),y=price)) 
  geom_point() 
  xlab('index')
  

Вывод:

введите описание изображения здесь

Некоторые используемые данные:

 #Data
df <- structure(list(index = 1:2, price = c("1000,2000,3000", "2000,500"
)), class = "data.frame", row.names = c(NA, -2L))
  

И если вам нужен некоторый цвет для каждого индекса:

 #Data and plot 2
df %>% separate_rows(price,sep=',') %>%
  mutate(price=as.numeric(price)) %>%
  full_join(data.frame(index=1:12)) %>%
  ggplot(aes(x=factor(index),y=price,color=factor(index))) 
  geom_point() 
  xlab('index') 
  theme(legend.position = 'none')
  

Вывод:

введите описание изображения здесь