Как вы объединяете несколько диаграмм из списка кадров данных?

Это репост из раздела статистики Stack Exchange. Я задал вопрос там, мне посоветовали задать этот вопрос здесь. Итак, вот оно.

У меня есть список фреймов данных. Каждый кадр данных имеет аналогичную структуру. В каждом кадре данных есть только один числовой столбец. Из-за моих требований к данным важно, чтобы каждый кадр данных имел разную длину. Я хочу создать диаграмму числовых значений, классифицированных по атрибутам в другом столбце. Но ящичковая диаграмма должна включать информацию из всех фреймов данных.

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


person Sam    schedule 23.02.2011    source источник


Ответы (3)


Сэм,

Я предполагаю, что это ответ на этот вопрос? Возможно, ваши примеры данных лучше иллюстрируют нюансы ваших потребностей (часть «классифицировано по атрибутам в другом столбце»), но здесь должен работать тот же подход melting.

library(ggplot2)
library(reshape2)
#Fake data
a <- data.frame(a = rnorm(10))
b <- data.frame(b = rnorm(100))
c <- data.frame(c = rnorm(1000))

#In a list
myList <- list(a,b,c)


#In a melting pot
df <- melt(myList)

#Separate boxplots for each data.frame
qplot(factor(variable), value, data = df, geom = "boxplot")
#All values plotted together as one boxplot
qplot(factor(1), value, data = df, geom = "boxplot")
person Chase    schedule 23.02.2011
comment
Ты не можешь просто растопить список? - person hadley; 23.02.2011
comment
@hadley - действительно можешь. Раньше я не использовал melt специально для списков, так что спасибо за подсказку. Будет изменено соответственно. - person Chase; 23.02.2011
comment
действительно да, это продолжение этого вопроса. Спасибо за редактирование. - person Sam; 24.02.2011
comment
Обратите внимание, что вам также необходимо добавить библиотеку (изменить форму), чтобы это работало. - person Diomidis Spinellis; 15.04.2016
comment
@DiomidisSpinellis - спасибо, добавил это. Еще в 2011 году, когда на этот вопрос был дан ответ, изменение формы загружалось по умолчанию при загрузке ggplot2... это уже не так, поэтому я обновил код. - person Chase; 16.04.2016

a<-data.frame(c(1,2),c("x","y"))
b<-data.frame(c(3,4,5),c("a","b","c"))
boxplot(c(a[1],b[1]))

С помощью «1» я выбираю столбец, который хочу, из фрейма данных.

Кадры данных не могут иметь разную длину столбцов (должны иметь одинаковое количество строк для каждого столбца), но вы можете указать boxplot для параллельного построения нескольких наборов данных.

person Bernd Elkemann    schedule 23.02.2011
comment
Это решение не будет работать, если оно будет построено непосредственно из списка. - person USER_1; 13.03.2016

Используя функцию melt() и базовую диаграмму R:

#Fake data
a <- data.frame(a = rnorm(10))
b <- data.frame(b = rnorm(100))
c <- data.frame(c = rnorm(100) + 5)

#In a list
myList <- list(a,b,c)

#In a melting pot
df <- melt(myList)

# plot using base R boxplot function
boxplot(value ~ variable, data = df)
person USER_1    schedule 13.03.2016