我发现了许多与我的问题类似的问题,但是他们要么不需要加权表,要么只需要双向表。我正在尝试两者都做。
使用wtd.table,我有以下代码行:
wtd.table(fulldata2$income, fulldata2$WIHH, fulldata2$hhsize, weights = fulldata2$WGTP)
此输出仅提供收入和WIHH加权。它也不包含hhsize。
使用常规表,我以三向格式获得了正确的输出,但是没有加权。
tab <- table(fulldata2$income, fulldata2$WIHH, fulldata2$hhsize)
tab2 <- prop.table(tab)
三频和加权频率表都可以执行什么功能?理想情况下,也应像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
类,也可以通过仅使用count
(dplyr
的一部分)中的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