如何在R中制作三路加权表-与wtd.table类似

问题描述 投票:0回答:1

我发现了许多与我的问题类似的问题,但是他们要么不需要加权表,要么只需要双向表。我正在尝试两者都做。

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

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

此输出仅提供收入和WIHH加权。它也不包含hhsi​​ze。

使用常规表,我以三向格式获得了正确的输出,但是没有加权。

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

三频和加权频率表都可以执行什么功能?理想情况下,也应像prop.table一样按比例分配它。

谢谢!

frequency weighted
1个回答
0
投票

首先,这是一些示例数据(即使需要创建这样的示例数据集,也要尝试将它们包括在您的问题中)。请注意,我在这里使用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类,也可以通过仅使用countdplyr的一部分)中的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  
© www.soinside.com 2019 - 2024. All rights reserved.