1

郵便番号を含むデータを地域に離散化したい

キャラデータあります

サンプル:

zip_code
'45654'
'12321'
'99453'

ルールのある6つのカテゴリがあります。

リージョン 1 - NE: 01000-19999

リージョン 2 - SE: 20000-39999

リージョン 3 - MW: 40000-58999,60000-69999

地域 4 - 南西: 70000-79999,85000-88499

リージョン 5 - MT: 59000-59999,80000-84999,88900-89999

リージョン 6 - PC: 90000-99999

出力を因子データにしたい:

region
'MW'
'NE'
'PC'

明らかに、私はデータを離散化する多くの方法を知っていますが、クリーンでエレガントなものはありません (ループ、ifelse など)。

このデータを離散化するために 6 つのカテゴリのケースを適用するエレガントな方法はありますか?

4

3 に答える 3

2

さて、面倒ですが、これでうまくいきます。一部の郵便番号は 0 で始まるため、文字オブジェクトを使用する必要があると思います。これらの番号を郵便番号に置き換えます。

zip_code <- c('1','6','15')
regions <- list(NE = as.character(1:3), 
        SE = as.character(4:6), 
        MW = as.character(7:9), 
        SW = as.character(10:12), 
        MT = as.character(13:15), 
        PC = as.character(16:19))
sapply(zip_code, function(x) names(regions[sapply(regions, function(y) x %in% y)]))

 1    6   15 
"NE" "SE" "MT" 
于 2014-11-12T01:41:32.290 に答える
1

試すこともできます(@Scott Chamberlainのデータを使用)

  with(stack(regions), unique(ind[ave(values %in% zip_code, ind, FUN=I)]))
 #[1] NE SE MT
 #Levels: MT MW NE PC SE SW

または

 library(dplyr)
 library(tidyr)
 unnest(regions, region) %>%
                     group_by(region) %>%
                     filter(x %in% zip_code)

 # region x
 #1   NE  1
 #2   SE  6
 #3   MT 15

または

 r1 <- vapply(regions, function(x) any(x %in% zip_code), logical(1))
 names(r1)[r1]
 #[1] "NE" "SE" "MT"
于 2014-11-12T03:27:19.263 に答える