0

私は R の比較的新しいユーザーですが、インターンシップの研究課題を完了するためにその場で言語を独学しなければなりませんでした。

出発地の国勢調査データ ファイルを扱っています。このデータは次のようになります。

w_geocode       h_geocode S000 SA01 SA02 SA03 SE01 SE02 SE03 SI01 SI02 SI03

1  360010001001005 - 360010001001010 -  1    0    1    0    0    0    1    1    0    0

2 360010001001005 - 360010001001011  -  1    0    1    0    0    0    1    1    0    0

3 360010001001005 - 360010001001039  -  1    0    1    0    0    0    1    1    0    0

4 360010001001005 - 360010014001009  -  1    0    1    0    0    0    1    0    1    0

5 360010001001005 - 360010015001007 -   1    0    1    0    0    0    1    0    1    0

6 360010001001005 - 360010019011001  -  1    0    1    0    0    0    1    1    0    0

このようなデータが約 500 万行あります。これらの 15 桁の数字はそれぞれ、特定の場所を表しています。このデータの関連性を高めるために、以下を使用してこれらの 15 桁のコードを 11 桁のコードに短縮しました。

options(scipen=100)  #to avoid scientific notation

nyod=read.csv("ny_od_main_JT00_2010.csv")

x=nyod[,1]

y=nyod[,2]

z=nyod[,3]

tx=trunc(x/10000)

ty=trunc(y/10000)

nyodI=cbind(tx,ty,z)

その後、次のようなものが得られます。

              tx          ty z
[1,] 36001000100 36001000100 1

[2,] 36001000100 36001000100 1

[3,] 36001000100 36001000100 1

[4,] 36001000100 36001001400 1

[5,] 36001000100 36001001500 1

[6,] 36001000100 36001001901 1

しかし、ご覧のとおり、集約したい冗長性があります。理想的には、たとえば、行 1、2、および 3 が 1 に統合され、z の合計が 3 になるようにしたいのですが、すべての冗長性に対してこのプロセスを実行する必要があります。

私の質問が十分に具体的で、誰が読んでも意味があることを願っています。ご協力いただきありがとうございます。

4

3 に答える 3

2

パッケージを使用すると、関数baseを使用するだけで済みますaggregate

nyodI
##            tx          ty z
## 1 36001000100 36001000100 1
## 2 36001000100 36001000100 1
## 3 36001000100 36001000100 1
## 4 36001000100 36001001400 1
## 5 36001000100 36001001500 1
## 6 36001000100 36001001901 1

aggregate(z ~ tx + ty, data = nyodI, FUN = sum)
##            tx          ty z
## 1 36001000100 36001000100 3
## 2 36001000100 36001001400 1
## 3 36001000100 36001001500 1
## 4 36001000100 36001001901 1
于 2013-02-25T07:50:05.613 に答える
1

データの切り捨ての最初の部分が非常に長いため、次のように実行できます。

dat <- nyod[,1:3]
nyod[,1:2] <- trunc(nyod[,1:2]/1000)

aggregate残りについては、提案どおりに使用できますddply

于 2013-02-25T08:03:16.750 に答える
0

試す

library(plyr) 
df <– ddply(nyodI, .(tx, ty), summarise, z.sum=sum(z)) 
于 2013-02-25T07:55:06.777 に答える