4

国勢調査の郡隣接データを使用したいのですが、それを適切な形式にすることに行き詰まっています。データは、最初の郡、最初のコード、2 番目の郡、2 番目のコードの 4 つの列で表示されます。最初のcounty列は繰り返されず、代わりに私が今読んだ方法で値 "" を取ります:

                     c1   cd1                    c2   cd2
1   Alamance County, NC 37001   Alamance County, NC 37001
2                          NA    Caswell County, NC 37033
3                          NA    Chatham County, NC 37037
4                          NA   Guilford County, NC 37081
5                          NA     Orange County, NC 37135
6                          NA   Randolph County, NC 37151
7                          NA Rockingham County, NC 37157
8  Alexander County, NC 37003  Alexander County, NC 37003
9                          NA   Caldwell County, NC 37027
10                         NA    Catawba County, NC 37035
11                         NA    Iredell County, NC 37097
12                         NA     Wilkes County, NC 37193
13 Alleghany County, NC 37005  Alleghany County, NC 37005
14                         NA       Ashe County, NC 37009
15                         NA      Surry County, NC 37171
16                         NA     Wilkes County, NC 37193
17                         NA    Grayson County, VA 51077
18     Anson County, NC 37007      Anson County, NC 37007
19                         NA Montgomery County, NC 37123
20                         NA   Richmond County, NC 37153

私はたまたまそのリンクで見つかったデータのノースカロライナの部分にのみ興味があります。その一部は上に表示されているものです。

#
nc_cc <- structure(list(c1 = c("Alamance County, NC", "", "", "", "", "", "", "Alexander County, NC", "", "", "", "", "Alleghany County, NC", "", "", "", "", "Anson County, NC", "", ""), cd1 = c(37001L, NA, NA, NA, NA, NA, NA, 37003L, NA, NA, NA, NA, 37005L, NA, NA, NA, NA, 37007L, NA, NA), c2 = c("Alamance County, NC", "Caswell County, NC", "Chatham County, NC", "Guilford County, NC", "Orange County, NC", "Randolph County, NC", "Rockingham County, NC", "Alexander County, NC", "Caldwell County, NC", "Catawba County, NC", "Iredell County, NC", "Wilkes County, NC", "Alleghany County, NC", "Ashe County, NC", "Surry County, NC", "Wilkes County, NC", "Grayson County, VA", "Anson County, NC", "Montgomery County, NC", "Richmond County, NC" ), cd2 = c(37001L, 37033L, 37037L, 37081L, 37135L, 37151L, 37157L, 37003L, 37027L, 37035L, 37097L, 37193L, 37005L, 37009L, 37171L, 37193L, 51077L, 37007L, 37123L, 37153L)), .Names = c("c1", "cd1", "c2", "cd2"), row.names = c(NA, 20L), class = "data.frame")
#

これからきれいな隣接関係を作成したいので (郡名は不要です)、目的の出力はさまざまな形式 (data.frame、リストなど) になる可能性があります。

私が思いついた大まかな解決策は(多くのことを考えた後)これです:

require(data.table)
DT <- data.table(nc_cc)
DT[,list(cd1=cd1[1],cd2),by=cumsum(!is.na(cd1))][,list(cd1,cd2)]

与える

      cd1   cd2
 1: 37001 37001
 2: 37001 37033
 3: 37001 37037
 4: 37001 37081
 5: 37001 37135
 6: 37001 37151
 7: 37001 37157
 8: 37003 37003
 9: 37003 37027
10: 37003 37035
11: 37003 37097
12: 37003 37193
13: 37005 37005
14: 37005 37009
15: 37005 37171
16: 37005 37193
17: 37005 51077
18: 37007 37007
19: 37007 37123
20: 37007 37153

data.table上記のソリューションで使用したため、これにタグを付けましたroll。本当に、私は のドキュメントを理解したことがないrollので、ここで何かを学びたいと思っています.

編集: この質問は同じことを尋ねているので、質問を次のように修正しdata.tableます。

4

2 に答える 2

0

@Arunのroll答えに基づいて解決策を見つけました!

cumsum私のアプリケーションでは、@eddi(...そして私は質問を述べて)が使用した答えよりもはるかに複雑です:

DT <- data.table(nc_cc)
setkey(DT[,i:=.I],i)

DT[
    DT[c1!=""][J(1:20),roll=TRUE][,list(c1,cd1),key=i],
    `:=`(c1=i.c1,cd1=i.cd1)
]

@eddiの他の質問への回答から、そのi.nameことを学びました。

于 2013-09-29T03:29:20.420 に答える