【问题标题】:To make groups according to addresses in demographic data根据人口统计数据中的地址进行分组
【发布时间】:2014-12-29 13:55:53
【问题描述】:

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

数据集的名字是demo。

str(demo)

这有每行中每个人的信息。

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

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

我想根据指示人员地址的第 4 列进行分组。 问题是因子的级别是 900。这是因为地址已完全写入。

我想组组分配一些省份的人。因此,R 需要读取因子并识别字母以进行分组。

我该怎么做?请帮帮我。 google了很久都没找到。

【问题讨论】:

  • 我了解您想制作groups。但是,如果没有进一步的信息以及可重复的数据(英文),就很难提供帮助。
  • 嗨,问题是您需要对给出完整地址的字符串进行子集化以提取省份吗?地址中的省份总是在同一个地方吗?首先,您可以查看strsplitgsub
  • @andybega 确实,它总是在地址中的同一个地方。
  • @akrun 我不确定您是否可以阅读可重现的数据,因为它不是英文的。不过我可以试试。
  • @DooHyunShin 不,我不能:-)

标签: r street-address


【解决方案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上的这个wiki页面猜测,如果城市和省(区?)总是在地址的开头,那么它会更容易一些,我们可以避免使用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

【讨论】:

  • 非常感谢,但还有一件事……一个城市有 1000 万人口,而其他城市的人口很少。所以在一个人口多的城市,我需要按省份分组。这正是你帮助我回答的问题。但是,对于人口较少的城市,我需要按城市名称划分组......你认为上面的答案可能吗?再次非常感谢您。
  • 我想是的。如果城市也总是相同的词序,您可以使用类似的代码为城市创建一个变量,然后使用两个 2 作为您设置的第三个变量,例如 ifelse(city=="Seoul", province, city)
  • 即使我使用了“stringsAsFactors=FALSE”,数据框也有地址作为因素。
  • 好吧,我解决了因素问题。但我还有一个问题。编码后你教我 "words
  • 三、四字地址中的城市和省在哪里?基于this 我猜城市是第一,字(省)是第二。在这种情况下,您可以避免使用rbind,请参阅我所做的编辑。
猜你喜欢
  • 2017-11-22
  • 2017-02-14
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2019-06-11
  • 2017-12-02
相关资源
最近更新 更多