首页 > 解决方案 > 如何将多个频率表堆叠到 R 中的一个表中?

问题描述

我不知道我在尝试寻找问题的答案时是否使用了错误的术语,但我一直无法弄清楚什么似乎是一个简单的问题。我有一个包含多个变量的大型数据集,我想在这些数据集上运行一系列 2 路频率表。我的变量之一是“国家”,我需要按每个国家(其中有 31 个)划分我的频率。我有 3 个变量,Protest、Riot,以及两者的组合 - Demonstrations。我正在对每个滞后数据面板变量 - lag.value 做一个交叉表。我了解如何将它们编码为独立测试,但是,有没有办法将所有内容“堆叠”在一个表中?就像 lag.value 在顶部一样,每一行代表一个国家的输出?还是选择性地列出几个国家进行测试?

DT <- data.table(Country = rep(c("India", "Pakistan", "Sudan"), 12), 
             Protest = sample( 0:1, size = 12, replace = T),
             Riot = sample( 0:1, size = 12, replace = T), 
             Demonstrations = sample( 0:1, size = 12, replace = T),
             lag.value = sample( 0:1, size = 12, replace = T))

DT[Country == 'India', table(Protest, lag.value)]
DT[Country == 'Pakistan', table(Protest, lag.value)]
DT[Country == 'Sudan', table(Protest, lag.value)]

只看对 lag.value 的抗议......我明白如何做的是个别表格

#india
# lag.value
#Protest 0 1
#      0 3 3
#      1 3 3

#pakistan
# lag.value
#Protest 0 1
#      1 3 9

#sudan
#lag.value
#Protest 0 1
#      0 3 3
#      1 6 0

有没有办法让一张干净的桌子(带有国家名称)显示?像这样的东西:

#         lag value
#Protest     0 1 
# India    0 3 3
#          1 3 3
# Pakistan 1 3 9 
# Sudan    0 3 3
#          1 6 0

标签: rfrequency

解决方案


table而不是在每个子集上单独运行,而是ftable通过包含“国家”列来执行

DT[, ftable(Country, Protest, lag.value)]
          lag.value  0  1
Country  Protest                
India    0                  0  6
         1                  0  6
Pakistan 0                  0  9
         1                  3  0
Sudan    0                  0  0
         1                  0 12

推荐阅读