2014-08-31 1 views
1

Так вот, я уверен в довольно элементарной проблеме. У меня есть кадр данных, который содержит данные в течение 10 лет для группы стран. Похоже на это. Кадр данных равен df.Как создать временные ряды для каждой строки кадра данных с неназванным первым столбцом

    X2003 X2004 X2005 X2006 X2007 X2008 X2009 X2010 X2011 X2012 
Afghanistan   7.321 7.136 6.930 6.702 6.456 6.196 5.928 5.659 5.395 5.141 
Albania    2.097 2.004 1.919 1.849 1.796 1.761 1.744 1.741 1.748 1.760 
Algeria    2.412 2.448 2.507 2.580 2.656 2.725 2.781 2.817 2.829 2.820 
Angola    6.743 6.704 6.657 6.598 6.523 6.434 6.331 6.218 6.099 5.979 
Antigua and Barbuda 2.268 2.246 2.224 2.203 2.183 2.164 2.146 2.130 2.115 2.102 
Argentina   2.340 2.310 2.286 2.268 2.254 2.241 2.228 2.215 2.201 2.188 

Первая колонка - метаданные. У него нет имени. Я хотел бы использовать qplot для построения временных рядов для каждой из строк. Что-то вроде следующей команды:

library(ggplot2) 
qplot (data = df, binwidth = 1, geom="freqpoly") but I get the following error 

Error: stat_bin requires the following missing aesthetics: x. 

Я хотел бы задать х = первый столбец, но у меня нет имени на этой колонке. Должен ли я создать первый столбец имен стран? Если да, то как мне это сделать? Кажется, что должен быть более простой способ. Извините, если это так элементарно.

ответ

0

Не знаете, что вам нужно, может быть, что-то вроде этого?

library(reshape2) 
library(ggplot2) 
df$metadata <- row.names(df) 
df <- melt(df, "metadata") 
ggplot(df, aes(variable, value, group = metadata, color = metadata)) + 
    geom_line() 

enter image description here

+0

Извините, что это не совсем то, что я искал. Я думаю, это не частотный многоугольник, а временный ряд. Я хочу делать ежегодные сериалы для каждой страны с течением времени. Поэтому для Афганистана я хотел бы увидеть значение в 2000 году, затем значение в 2001 году и т. Д. –

+0

@CharlesFogel, см. Мое обновление, используя ваши данные. Здесь нет ничего особенного, просто используйте «melt» однажды –

+0

Ah. Вот оно ... Хорошо, спасибо! –

0

следующие комментарии, я предполагаю, что вы хотите такого рода графики?

# Create a "long" data frame rather than a "wide" data frame. 

country <- rep(c("Afghanistan", "Albania", "Algeria","Angola", 
      "Antigua and Barbuda", "Argentina"),each = 10, times = 1) 
year <- rep(c(2003:2012), each = 1, times = 6) 
value <- runif(60, 0, 50) 

foo <- data.frame(country,year,value,stringsAsFactors=F) 
foo$year <- as.factor(foo$year) 

# Draw a ggplot figure 

ggplot(foo, aes(x=year, y = value,group = country, color = country)) + 
    geom_line() + 
    geom_point() 
+0

Да. Это дает временные ряды для каждой страны. Но ничего себе, это кажется сложным. У меня уже есть данные в каждой строке для каждой страны. Разве нет способа сделать график с каждым столбцом как галочкой по оси x? –

+0

Что вы подразумеваете под словом? Не могли бы вы запустить следующее и посмотреть, означает ли это то, что вы имеете в виду? 'ggplot (foo, aes (x = year, y = value, group = country, color = country, shape = country)) + geom_point()' – jazzurro

+0

Нет. Ваше первое решение было верным. Это просто требует большого количества манипуляций с данными, которые я не понимаю. –

0

Hi. Здесь очень похоже на то, что Чарльз правильно предложил использовать расплав. Я использовал пакет ggvis, чтобы произвести сюжет и убедился, что масштаб у-axsis устанавливается на 0. Блок коды ниже предполагает, что ДФ уже считан в R.

R Код:


    library(reshape2) 
    library(ggvis) 

    str(df) # just to demonstrate initial structure of df....results in coment block below 

    # data.frame': 6 obs. of 11 variables: 
    # $ Country: chr "Afghanistan" "Albania" "Algeria" "Angola" ... 
    # $ X2003 : num 7.32 2.1 2.41 6.74 2.27 ... 
    # $ X2004 : num 7.14 2 2.45 6.7 2.25 ... 
    # $ X2005 : num 6.93 1.92 2.51 6.66 2.22 ... 
    # $ X2006 : num 6.7 1.85 2.58 6.6 2.2 ... 
    # $ X2007 : num 6.46 1.8 2.66 6.52 2.18 ... 
    # $ X2008 : num 6.2 1.76 2.73 6.43 2.16 ... 
    # $ X2009 : num 5.93 1.74 2.78 6.33 2.15 ... 
    # $ X2010 : num 5.66 1.74 2.82 6.22 2.13 ... 
    # $ X2011 : num 5.39 1.75 2.83 6.1 2.12 ... 
    # $ X2012 : num 5.14 1.76 2.82 5.98 2.1 ... 

    df1 <- melt(df, "Country") 

    df1 %>% ggvis(~factor(variable),~value,stroke=~Country) %>% layer_lines(strokeWidth:=2.5) %>% 
    add_axis("x",title="Year") %>% scale_numeric("y",zero=TRUE) 

Я никогда не начинал использовать ggplot, но когда я увидел ggvis и особенно его использование оператора%>% pipe, введенного в пакет magrittr, я был подключен. Лучший ....

+0

Благодарим вас за этот интересный подход. –

Смежные вопросы