Как я могу построить новый вектор с конкретными данными из двух других векторов разных размеров, используя R - PullRequest
0 голосов
/ 08 марта 2019

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

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

Затем у меня есть 5 различных векторов регионов сего собственные состояния.

states <-  c("AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN", "RO", "RR", "RS", "SC", "SE", "SP", "TO")

no <- c("AC","AP","AM","PA","RO","RR","TO")
su <- c("PR","SC","RS")
co <- c("GO","MG","MS","DF")
ne <- c("AL","BA","CE","MA","PB","PE","PI","RN","SE")
mges <- c("MG","ES")
rj <- c("RJ")
sp <- c("SP")

Мне нужна программа, которая зацикливает вектор «состояний» на веб-сайте для формирования фрейма данных со столбцами: «STATE» «REGION».

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

Ответы [ 2 ]

2 голосов
/ 08 марта 2019

Рекомендую хранить информацию о регионе в списке. Этот список можно использовать для создания фрейма данных.

regions <- list(no = c("AC","AP","AM","PA","RO","RR","TO"),
                su = c("PR","SC","RS"),
                co = c("GO","MG","MS","DF"),
                ne = c("AL","BA","CE","MA","PB","PE","PI","RN","SE"),
                mges = c("MG","ES"),
                rj = c("RJ"),
                sp = c("SP"))

region_dat <- data.frame(state = unlist(regions),
                         region = rep(names(regions), lengths(regions)))

Теперь вы можете объединить данные states и фрейм данных, содержащий информацию о регионе:

merge(data.frame(state = states), region_dat)

Результат:

   state region
1     AC     no
2     AL     ne
3     AM     no
4     AP     no
5     BA     ne
6     CE     ne
7     DF     co
8     ES   mges
9     GO     co
10    MA     ne
11    MG     co
12    MG   mges
13    MS     co
14    PA     no
15    PB     ne
16    PE     ne
17    PI     ne
18    PR     su
19    RJ     rj
20    RN     ne
21    RO     no
22    RR     no
23    RS     su
24    SC     su
25    SE     ne
26    SP     sp
27    TO     no
0 голосов
/ 09 марта 2019

Если вы можете немного реструктурировать ваши данные, это tidyverse способ сделать то, что вы хотите сделать.

library(tidyverse)

df1 = data.frame(states = c("AC","AP","AM","PA","RO","RR","TO"), region='no')
df2 = data.frame(states = c("PR","SC","RS"), region='su')
df3 = data.frame(states = c("GO","MG","MS","DF"), region='co')
df4 = data.frame(states = c("AL","BA","CE","MA","PB","PE","PI","RN","SE"), region='ne')
df5 = data.frame(states = c("MG","ES"), region='mges')
df6 = data.frame(states = c("RJ"), region='rj')
df7 = data.frame(states = c("SP"), region='sp')

dfs = list(df1,df2,df3,df4,df5,df6,df7)

state_regions = bind_rows(dfs)

Для каждого региона создайте фрейм данных со связанными состояниями.Затем объедините все строки фрейма данных.

   states region
1      AC     no
2      AP     no
3      AM     no
4      PA     no
5      RO     no
6      RR     no
7      TO     no
8      PR     su
9      SC     su
10     RS     su
11     GO     co
12     MG     co
13     MS     co
14     DF     co
15     AL     ne
16     BA     ne
17     CE     ne
18     MA     ne
19     PB     ne
20     PE     ne
21     PI     ne
22     RN     ne
23     SE     ne
24     MG   mges
25     ES   mges
26     RJ     rj
27     SP     sp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...