Составлять группы по адресам в демографических данных
Мой набор данных не на английском языке, но на корейском языке. Количество наблюдений более 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