r - 行和列中有多个项目的交叉表
问题描述
假设我有来自metric_1
四个不同组(xi
、和)调用的变量的平均值的数据delta
,给出了一个名为 的新变量。数据如下所示。scenario
model
mean_metric1
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
我想使用列中的两个变量和行中的两个变量从这些信息中创建一个交叉表,如 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
解决方案
您可以ftable
结合使用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
直接使用只会给出组合的计数。请注意,这xtabs
将sum
重复组合。
推荐阅读
- java - Spring 无法在配置文件“dev”中初始化 bean
- imagemagick - 使用 PythonMagick 将 pdf 转换为 JPG
- c# - Parallel.Foreach 循环,与显式 throw 语句不一致的行为
- javascript - 如何使用 JavaScript-Console 检查 ExtJS 中的 div 元素
- java - ExifInterface:由于未定义标签编号,因此跳过标签条目,同时压缩图像
- php - 使用 php mysql 使用 if else 条件从数据库中获取数据
- javascript - 如何使用 jquery/ajax 访问响应头
- haskell - 在 Haskell 中将 IO [Float] 转换为 [Float]
- google-bigquery - 避免在 Bigquery 中处理无效的代码点
- javascript - 使用嵌套导航器进行深度链接后,常规导航不起作用