如何在 R 中进行三向加权 table - 类似于 wtd.table

How to do a three-way weighted table in R - similar to wtd.table

我发现了很多与我的类似的问题,但要么他们不想要加权 tables,要么只想要双向 tables。我正在尝试两者兼顾。

使用wtd.table,我有以下代码行:

wtd.table(fulldata2$income, fulldata2$WIHH, fulldata2$hhsize, weights = fulldata2$WGTP)

此输出仅提供收入和 WIHH 加权。它也不包括 hhsize。

使用常规 table,我得到了三向格式的正确输出,但没有加权。

tab <- table(fulldata2$income, fulldata2$WIHH, fulldata2$hhsize)
tab2 <- prop.table(tab) 

什么函数可以同时做三路和加权频率tables?理想情况下,也按 prop.table 那样的比例给它。

谢谢!

首先,这里有一些示例数据(尝试将这些包含在您的问题中,即使它需要创建这样的示例数据集)。请注意,我在这里使用 tidyverse 包:

test <-
  tibble(
    var1 = "A"
    , var2 = "b"
    , var3 = "alpha") %>%
  complete(
    var1 = c("A", "B")
    , var2 = c("a", "b")
    , var3 = c("alpha", "beta")) %>%
  mutate(wt = 1:n())

所以,数据是:

# A tibble: 8 x 4
  var1  var2  var3     wt
  <chr> <chr> <chr> <int>
1 A     a     alpha     1
2 A     a     beta      2
3 A     b     alpha     3
4 A     b     beta      4
5 B     a     alpha     5
6 B     a     beta      6
7 B     b     alpha     7
8 B     b     beta      8

那么你要找的函数是xtabs:

xtabs(wt ~ var1 + var2 + var3
      , data = test)

给出:

 , , var3 = alpha

    var2
var1 a b
   A 1 3
   B 5 7

, , var3 = beta

    var2
var1 a b
   A 2 4
   B 6 8

如果您不需要结果具有 table class,您也可以仅使用 dplyr 中的 count(部分tidyverse):

test %>%
  count(var1, var2, var3
        , wt = wt)

用你的结果给出小提示(修改后的 data.frame):

# A tibble: 8 x 4
  var1  var2  var3      n
  <chr> <chr> <chr> <int>
1 A     a     alpha     1
2 A     a     beta      2
3 A     b     alpha     3
4 A     b     beta      4
5 B     a     alpha     5
6 B     a     beta      6
7 B     b     alpha     7
8 B     b     beta      8

然后您可以对其执行任何您想要的计算,例如每个 var3:

中的百分比
test %>%
  count(var1, var2, var3
        , wt = wt) %>%
  group_by(var3) %>%
  mutate(prop_in_var3 = n / sum(n))

给出:

# A tibble: 8 x 5
# Groups:   var3 [2]
  var1  var2  var3      n prop_in_var3
  <chr> <chr> <chr> <int>        <dbl>
1 A     a     alpha     1       0.0625
2 A     a     beta      2       0.1   
3 A     b     alpha     3       0.188 
4 A     b     beta      4       0.2   
5 B     a     alpha     5       0.312 
6 B     a     beta      6       0.3   
7 B     b     alpha     7       0.438 
8 B     b     beta      8       0.4