根据人口统计数据中的地址制作组

时间:2014-12-29 13:55:54

标签: r street-address

我的数据集不是英文,而是韩文。 观察次数超过3000次。

数据集的名称是demo。

str(demo)

这包含每行中每个人的信息。

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

以上是数据集的第4列结构。

我想根据第4栏制作小组,表示人的地址。 问题是因子的水平是900.这是因为地址是完全写的。

我想组织一些省份的人员。因此,R需要阅读因素并识别字母以制作小组。

我该怎么做?请给我一个帮助。我用Google搜索了很长时间但我找不到它。

1 个答案:

答案 0 :(得分: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

通过South Korean address formats上的这个维基页面猜测,如果城市和省(病房?)总是在地址的开头,那么它会更容易一些,我们可以避免使用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