0

次のようなデータがあります。

country_name --------都市----------- area_change_pc
バングラデシュ------------ ボグラ--------(33.33)
バングラデシュ-- ----------チャンドプール-- (-41.76)
インド---------------------デワス-------(12.95)
パキスタン----------------クエッタ-------(4.08)
パキスタン----------------Vehari---- ----(206.01)
...

次に、コードを使用して、負 (<0)、小 (>=0、<15)、中 (>=15、<50)、および大 (>= 50) の 4 つの偶発事象に基づいて、growth という新しい変数を作成しました。

urbanization$growth[urbanization$area_change_pc<0]<-"1. negative"
urbanization$growth[urbanization$area_change_pc>=0 & area_change_pc<15]<-"2. small"
urbanization$growth[area_change_pc>=15 & area_change_pc<50]<-"3. medium"
urbanization$growth[area_change_pc>=50]<-"4. large"

データは次のようになります。

country_name -------- City ----------- area_change_pc ---- growth
バングラデシュ------------ボグラ--------( 33.33)--------------------3. 中
バングラデシュ------------チャンドプール-- (-41.76)-------------------1. 負
のインド---------------------デワ-------(12.95)---------------- ----2. 遅い
パキスタン----------------クエッタ-------(4.08)--------------------- -2. 遅い
パキスタン----------------Vehari--------(206.01)------------------4. 大
...

次のようなテーブルを作成しようとしています。

             Bangladesh    India     Pakistan      Total
negative   
small 
medium
large

Area_Changeここで、各セルはそれらの偶発事象の平均によって埋められます。たとえば、最初のセルは、Area_Changeマイナス成長のバングラデシュのすべての都市の平均である必要があります。Totalすべての国における成長グループのみの平均になりたいと思います。area_change_pctapply を使用して、各国の平均を取得する方法を見つけました。

with(urbanization, tapply(area_change_pc, list(growth,country_name), mean))

私に与えます(データ値が入力されています-完全なデータセットを使用しているため、指定した数値と一致しないため、それらを省略しました):

----------------Bangladesh    India     Pakistan
negative   
small 
medium
large

ただし、合計列を作成する方法がわかりません。最終的には、その成長グループの平均に対して、各国と成長グループの間の有意差をテストできるように、合計列が必要です (つまり、バングラデシュのマイナス成長地域の面積の平均変化は、平均変化と大きく異なるのですか?すべての国の地域で?)。私がこれを達成する方法を知っている人はいますか?

4

1 に答える 1

0

まず、サンプル データを再現可能にします。

urbanization <- read.table(text=
"country_name City area_change_pc
Bangladesh Bogra 33.33
Bangladesh Chandpur -41.76
India Dewas 12.95
Pakistan Quetta 4.08
Pakistan Vehari 206.01", header=TRUE, stringsAsFactors = FALSE)

growth次に、列を作成する簡単な方法を次に示します。

urbanization$growth <- cut(urbanization$area_change_pc,
                           breaks = c(-Inf, 0, 15, 50, Inf),
                           labels = c("1. negative", "2. slow", 
                                      "3. medium", "4. large"),
                           right = FALSE)

このデータは、reshape2パッケージを使用して再配置および集計できます。

library("reshape2")

dcast(urbanization, growth~country_name, 
      fun.aggregate = mean, value.var="area_change_pc", 
      margins = "country_name")

を与える

       growth Bangladesh India Pakistan   (all)
1 1. negative     -41.76   NaN      NaN -41.760
2     2. slow        NaN 12.95     4.08   8.515
3   3. medium      33.33   NaN      NaN  33.330
4    4. large        NaN   NaN   206.01 206.010
于 2013-04-03T21:22:42.797 に答える