0

我的数据如下所示:

country_name --------城市----------- area_change_pc
孟加拉国------------博格拉--------(33.33)
孟加拉国-- ----------Chandpur-- (-41.76)
印度---------Dewas--------(12.95)
巴基斯坦----------------奎达------(4.08)
巴基斯坦----------------Vehari---- ----(206.01)
...

然后,我根据 4 个意外事件创建了一个名为增长的新变量:负 (<0)、小 (>=0, <15)、中 (>=15, <50) 和大 (>= 50),代码如下:

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 --------城市------------ area_change_pc ----增长
孟加拉国------------博格拉--------( 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_pc使用 tapply 获得每个国家的平均值:

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 回答