#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')
Вывод: