行和列中有多个项目的交叉表 [英] Crosstable with multiple items in rows and columns

查看:42
本文介绍了行和列中有多个项目的交叉表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我的数据来自于对名为 metric_1 的变量按四个不同组(xideltascenariomodel) 给出一个名为 mean_metric1 的新变量.数据如下所示.

Let's say I have data that comes from averaging a variable called metric_1 by four different groups (xi, delta, scenario and model) giving a new variable called mean_metric1. The data would look like the following.

set.seed(777)
xi        =   c(2, 4 )  
delta     =   c( 0.5, 1 )
scenario  = c("scenario_1","scenario_2")
model <- c("model_1", "model_2", "model_3")
df <- expand.grid(xi = xi, 
                   delta = delta,
                   scenario = scenario,
                   model = model)
df$mean_metric1 <- rnorm(nrow(df), 100 , 25)
   xi delta   scenario   model mean_metric1
1   2   0.5 scenario_1 model_1    112.24466
2   4   0.5 scenario_1 model_1     90.03647
3   2   1.0 scenario_1 model_1    112.77091
4   4   1.0 scenario_1 model_1     90.02970
5   2   0.5 scenario_2 model_1    140.96715
6   4   0.5 scenario_2 model_1    115.53185
7   2   1.0 scenario_2 model_1    105.06761
8   4   1.0 scenario_2 model_1    127.72344
9   2   0.5 scenario_1 model_2     94.84438
10  4   0.5 scenario_1 model_2     90.52587
11  2   1.0 scenario_1 model_2     92.39346
12  4   1.0 scenario_1 model_2    101.35406
13  2   0.5 scenario_2 model_2     52.97673
14  4   0.5 scenario_2 model_2     99.15609
15  2   1.0 scenario_2 model_2    157.78737
16  4   1.0 scenario_2 model_2    124.30850
17  2   0.5 scenario_1 model_3    124.11520
18  4   0.5 scenario_1 model_3     86.39669
19  2   1.0 scenario_1 model_3    116.78058
20  4   1.0 scenario_1 model_3    112.52047
21  2   0.5 scenario_2 model_3     49.23410
22  4   0.5 scenario_2 model_3    105.69380
23  2   1.0 scenario_2 model_3     80.42437
24  4   1.0 scenario_2 model_3    131.83980

我想使用列中的两个变量和行中的两个变量根据这些信息创建一个交叉表,如对象 wanted 所示.

I want to create a cross table out of this information using two variables in the columns and two variables in the rows as illustrated in object wanted.

wanted <- structure(list(V1 = c("delta_0.5", "xi_2", "112.24466", "94.84438","124.1152", "140.96715", "52.97673", "49.2341"), 
               V2 = c("delta_0.5","xi_4", "90.03647", "90.52587", "86.39669", "115.53185", "99.15609","105.6938"), 
               V3 = c("delta_1", "xi_2", "112.77091", "92.39346","116.78058", "105.06761", "157.78737", "80.42437"), 
               V4 = c("delta_1","xi_4", "90.0297", "101.35406", "112.52047", "127.72344", "124.3085","131.8398")), 
          class = "data.frame", row.names = c(" ", "", "model_1_scenario_1","model_2_scenario_1", "model_3_scenario_1", "model_1_scenario_2","model_2_scenario_2", "model_3_scenario_2"))

                          V1        V2        V3        V4
                   delta_0.5 delta_0.5   delta_1   delta_1
                        xi_2      xi_4      xi_2      xi_4
model_1_scenario_1 112.24466  90.03647 112.77091   90.0297
model_2_scenario_1  94.84438  90.52587  92.39346 101.35406
model_3_scenario_1  124.1152  86.39669 116.78058 112.52047
model_1_scenario_2 140.96715 115.53185 105.06761 127.72344
model_2_scenario_2  52.97673  99.15609 157.78737  124.3085
model_3_scenario_2   49.2341  105.6938  80.42437  131.8398

推荐答案

您可以将 ftablextabs 结合使用:

You can use ftable in conjunction with xtabs:

ftable(xtabs(mean_metric1 ~ scenario + model + xi + delta, df), col.vars=3:4)
                   xi            2                   4          
                   delta       0.5         1       0.5         1
scenario   model                                                
scenario_1 model_1       112.24466 112.77091  90.03647  90.02970
           model_2        94.84438  92.39346  90.52587 101.35406
           model_3       124.11520 116.78058  86.39669 112.52047
scenario_2 model_1       140.96715 105.06761 115.53185 127.72344
           model_2        52.97673 157.78737  99.15609 124.30850
           model_3        49.23410  80.42437 105.69380 131.83980

xtabs 是必需的,因为直接使用 ftable 只会给出组合的计数.请注意,xtabssum 重复组合.

xtabs is required since using ftable directly would just give a count of the the combinations. Note that xtabs will sum duplicated combinations.

这篇关于行和列中有多个项目的交叉表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆