Построение data.frame в R

Я новичок в R, и мне нужен совет по построению фрейма данных в R, который выглядит так:

         V1          V2         V3          V4         
          1       Mazda     Toyota     Peugeot
   Car1.txt 0,507778837 0,19834711 0,146892655
   Car2.txt 0,908717802 0,64214047 0,396508728

Я хотел бы построить этот кадр данных (который на самом деле имеет 7 столбцов и 95 строк) на одном графике, где v2, v3, v4 представляют собой линию другого цвета и названы как названия автомобилей, V1 как метка x- ось, тогда как ось y находится в диапазоне [0,1].

Я действительно понятия не имею, как это сделать, поэтому я очень благодарен за любой совет


person digitalaxp    schedule 05.05.2011    source источник
comment
Вы ознакомились с Введением в R? Есть раздел о графике. Но для начала проверьте раздел импорта данных, потому что мне кажется, что ваши данные не были правильно прочитаны в R. И добро пожаловать в StackOverflow;)   -  person Marek    schedule 05.05.2011
comment
Для начала ознакомьтесь с вводным руководством по R, глава 12: cran.r-project.org/doc/manuals/R-intro.pdf   -  person Andrie    schedule 05.05.2011


Ответы (3)


Врач прописывает небольшую модификацию фрейма данных Романа.

library(ggplot2)
my.cars <- data.frame(
  Toyota = runif(50), 
  Mazda = runif(50), 
  Renault = runif(50),
  Car = paste("Car", 1:50, ".txt", sep = "")  
)

my.cars.melted <- melt(my.cars, id.vars = "Car")

Затем он предполагает, что переменная car выглядит категоричной, поэтому первым выбором будет столбчатая диаграмма.

p_bar <- ggplot(my.cars.melted, aes(Car, value, fill = variable)) +
  geom_bar(position = "dodge")
p_bar

Затем он отмечает, что для 95 автомобилей это может стать немного громоздким. Возможно, точечный график был бы более подходящим.

p_dot <- ggplot(my.cars.melted, aes(Car, value, col = variable)) +
  geom_point() +
  opts(axis.text.x = theme_text(angle = 90))
p_dot

Поскольку получить полезную информацию по-прежнему немного сложно, возможно, лучше упорядочить автомобили по средней стоимости (независимо от того, что означает значение).

my.cars.melted$Car <- with(my.cars.melted, reorder(Car, value))

(Затем перерисуйте p_dot, как раньше.)

Наконец, доктор отмечает, что вы можете нарисовать линейный график, который рекомендовал Роман, с помощью

p_lines <- ggplot(my.cars.melted, aes(as.numeric(Car), value, col = variable)) +
  geom_line()
p_lines
person Richie Cotton    schedule 05.05.2011
comment
melt нужно library(reshape). - person fabb; 07.05.2012

Это должно помочь вам начать.

my.cars <- data.frame(Toyota = runif(50), Mazda = runif(50), Renault = runif(50)) #make some fake data for this example
plot(x = 1:nrow(my.cars), y = my.cars$Toyota, type = "n") #make an empty plot
with(my.cars, lines(x = 1:nrow(my.cars), y = Toyota, col = "red")) #add lines for Toyota
with(my.cars, lines(x = 1:nrow(my.cars), y = Mazda, col = "red")) # add lines for Mazda
with(my.cars, lines(x = 1:nrow(my.cars), y = Renault, col = "navy blue")) # add lines for Renault

Я использовал with(), чтобы вам не приходилось вводить my.cars$Toyota, my.cars$Mazda... каждый раз, когда вы хотите вызвать столбец. Исследуйте ?par для получения дополнительных параметров, которые можно передать в plot. Вскоре вас примет врач с раствором ggplot2.

person Roman Luštrik    schedule 05.05.2011

Фрейм данных не может быть построен, как в примере, поэтому я немного изменяю:

tcars <- read.table(textConnection(" V1       Mazda     Toyota     Peugeot
    Car1.txt 0,507778837 0,19834711 0,146892655
    Car2.txt 0,908717802 0,64214047 0,396508728", header=TRUE, dec=",")
 # need to use dec arg with commas as decimal points!
 tcars
        V1     Mazda    Toyota   Peugeot
1 Car1.txt 0.5077788 0.1983471 0.1468927
2 Car2.txt 0.9087178 0.6421405 0.3965087

 matplot(data.matrix(tcars[-1]), type="b", xaxt="n")
 axis(1, labels=tcars[[1]],at=1:NROW(tcars))

Результирующий график

person IRTFM    schedule 06.05.2011