r - форматирование данных в уникальные ключи с течением времени, заполненные значением

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

> head(df)
        city      state  year   population    stat1 stat2 stat3 stat4 stat5
1       BESSEMER     1    1      31509 0.3808436            0 0.63473928   2.8563268    9.5528262
2     BIRMINGHAM     1    1     282081 0.3119671            0 0.97489728   6.0266377    9.1321287
3 MOUNTAIN BROOK     1    1      18221 0.0000000            0 0.05488173   0.2744086    0.4390538
4      FAIRFIELD     1    1      12978 0.1541069            0 0.46232085   3.0050855    9.8628448
5     GARDENDALE     1    1       7828 0.2554931            0 0.00000000   0.7664793    1.2774655
6          LEEDS     1    1       7865 0.2542912            0 0.12714558   1.5257470   13.3502861
  stat6      stat6 stat7 stat8 stat9 cluster
1     26.976419     53.54026  5.712654                    0               0.2856327       9
2     35.670605     65.49183 11.982374                    0               0.4963113       9
3      6.311399     21.40387  1.426925                    0               0.1097635       3
4     21.266759     68.11527 11.480968                    0               1.0787487       9
5      6.770567     23.24987  3.960143                    0               0.0000000       3
6     24.157661     39.79657  4.450095                    0               1.5257470      15
agg
1  99.93970
2 130.08675
3  30.02031
4 115.42611
5  36.28002
6  85.18754

На самом деле все, что мне нужно, это 4 столбца city state year и agg

Моя конечная цель - просто построить график каждой уникальной пары город-государство, найденной в данных, с течением времени с привязанным к ней значением agg. Я, по-видимому, даже не могу получить данные в формате, который может распознать ggplot, поэтому мне просто нужно какое-то руководство о том, как можно очистить эти данные, чтобы получить их. У меня есть список каждого уникального объекта в следующем фрагменте кода.

df_ascending <- df[with(df, order(population)), ]
unique_city_state_pairs_as_df <- unique(as.data.frame(t(apply(df_ascending[,c("city","state")], 1, sort))));

Мне нужна конкретно каждая уникальная пара городов-государств ... и у меня есть текущее решение, которое очень мусор, поскольку я получаю отдельный объект data.frame, содержащий каждый уникальный город-государство в unique_city_state_pairs_as_df из df_ascending.

Возможные проблемы, которые возникают

  1. Для некоторых городов отсутствуют годы
  2. Есть города с одинаковым названием, но разные штаты
  3. В конечном итоге я хочу отобразить каждый город с течением времени в оттенках серого, с выбранным подмножеством городов на переднем плане с помощью цвета.

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


person bmc    schedule 09.03.2017    source источник
comment
Что касается 1 и 2, я бы порекомендовал что-то вроде define location = paste(city, state, sep="_"); определите все необходимые наблюдения с помощью expand.grid(locations, years); объедините это в. К вашему сведению, вы должны опубликовать воспроизводимый пример и задавать по одному вопросу за раз. См. stackoverflow.com/help/how-to-ask   -  person Frank    schedule 10.03.2017


Ответы (1)


вы можете попробовать что-то подобное, используя пакет dplyr

library(dplyr)
df1 <- df %>%
  #this will select relevant columns
  select(city, state, year, agg) %>%
  #this will create a new column with the city and states combined
  mutate(city_state = paste(as.character(city), as.character(state), sep = "_") 

#using na.omit should fix your problem with missing values
ggplot(na.omit(df1), aes(year, agg, color = city_state)+
  geom_point()+
  geom_line()
person tbradley    schedule 09.03.2017