Я использую пакет Survey
для анализа опроса. Я делаю таблицу сопряженности с четырьмя путями из моего набора данных. Мой набор данных выглядит следующим образом (фиктивные данные):
df <- data.frame(
v_1 = c(2, NA, 2, 1, 1, NA, 2, 1, 2, NA, 1, 2, 1, 2, 2),
v_2 = c(NA, NA, 1, NA, 1, NA, 2, 1, 3, NA, 1, NA, 1,2, NA),
v_3 = c(1, NA, NA, 1, 2,2, NA, NA, 2, NA, 2, NA, NA, NA, 2),
v_4 = c(NA, NA, NA, 1, 2, NA, NA, 1, 2, NA, 2, NA, 1, 2, 1),
weight = c(526, 1203, 1124, 526, 533, 1064, 564, 1124, 412, 1064, 581,
1064, 564, 999, 420),
v_5 = c(2, NA, 2, 1, 1, NA, 2, 1, 2, NA, 1, 2, 1, 2, 2)
)
После расчета частот для каждой категории, а также стандартных ошибок, я хотел бы преобразовать его в фрейм данных и запустить фильтр сумм и т. Д., Только здесьas.data.frame () из baseR работает. После преобразования и установки индекса я хотел бы разбить первый столбец на несколько столбцов, сопоставляя шаблоны.
library(tidyverse)
library(survey)
ds <- svydesign(ids=~0,data=df, weights=~weight)
#frequencies for each category as well as standard errors
# convert survey list into dataframe
df <- svytotal(~interaction(v_1, v_2, v_3,v_4), ds , na.rm = TRUE)
# convert to dataframe and reset index
dt <- as.data.frame(df, cut.names)
dt <- data.frame(dt , fix.empty.names = TRUE)
output
total SE
interaction(v_1, v_2, v_3, v_4)1.1.1.1 0 0
interaction(v_1, v_2, v_3, v_4)2.1.1.1 0 0
interaction(v_1, v_2, v_3, v_4)1.2.1.1 0 0
interaction(v_1, v_2, v_3, v_4)2.2.1.1 0 0
interaction(v_1, v_2, v_3, v_4)1.3.1.1 0 0
interaction(v_1, v_2, v_3, v_4)2.3.1.1 0 0
interaction(v_1, v_2, v_3, v_4)1.1.2.1 0 0
interaction(v_1, v_2, v_3, v_4)2.1.2.1 0 0
interaction(v_1, v_2, v_3, v_4)1.2.2.1 0 0
interaction(v_1, v_2, v_3, v_4)2.2.2.1 0 0
Мне нужно извлечь v_1, v_2, v_3, v_4 в качестве имен переменных и 1.1.1.1 для соответствующих значений формы (v_1, v_2, v_3, v_4)1.1.1.1
v_1 v_2 v_3 v_4
1 1 1 1
Желаемый выход
#only for v_1 :v_3
v_1 v_2 v_3 total SE
1 1 1 1 0 0
2 2 1 1 0 0
3 1 2 1 0 0
4 2 2 1 0 0
5 1 3 1 0 0
6 2 3 1 0 0
7 1 1 2 0 0