Составлять группы по адресам в демографических данных

Мой набор данных не на английском языке, но на корейском языке. Количество наблюдений более 3000.

Название набора данных - демо.

str(demo)

Это информация о каждом человеке в каждом ряду.

$ 거주지역: Factor w/ 900 levels "","강원 강릉시 포남1동",..: 595 235 595 832 12 126 600 321 600 589      ...

Выше приведена структура столбца в 4-м столбце.

Я хочу сделать группы в соответствии с 4-м столбцом, который указывает адреса людей. Проблема в том, что уровень фактора равен 900. Это происходит потому, что адреса полностью записаны.

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

Как я могу это сделать? Пожалуйста, дайте мне помощь. Я так долго гуглял, но не мог найти.

1 ответ

Решение

Вот, может быть, начало, не уверен, как это будет работать с нелатинскими символами.

foo <- data.frame(value=rnorm(3), 
                  address=c("blah blah province1", "blah blah province2", "province3"),
                  stringsAsFactors=FALSE)

words <- strsplit(foo$address, " ")
words <- do.call(rbind, words)
foo$province <- words[, 3]

head(foo)

Выход:

       value             address  province
1 0.01129269 blah blah province1 province1
2 0.99160104 blah blah province2 province2
3 1.59396745           province3 province3

Судя по этой вики-странице о форматах адресов Южной Кореи, если город и провинция (приход?) Всегда находятся в начале адреса, то это немного проще, и мы можем избежать использования rbind, который в приведенном выше коде перерабатывает более короткие адреса.

foo <- data.frame(value=rnorm(3), 
                  address=c("seoul ward1 street", "seoul ward2 street", "not-seoul ward-something     street"),
                  stringsAsFactors=FALSE)

foo$city <- sapply(foo$address, function(x) strsplit(x, split=" ")[[1]][1])
foo$ward <- sapply(foo$address, function(x) strsplit(x, split=" ")[[1]][2])

Теперь мы также можем использовать ifelse использовать палаты, если в Сеуле и городах иначе.

foo$group <- with(foo, ifelse(city=="seoul", ward, city))
foo

       value                         address      city           ward     group
1  1.0071995              seoul ward1 street     seoul          ward1     ward1
2  0.7192918              seoul ward2 street     seoul          ward2     ward2
3 -0.6047117 not-seoul ward-something street not-seoul ward-something not-seoul
Другие вопросы по тегам