如何解决如何重建具有多项选择的分类变量 数据
我有以下问题。我正在分析问卷中的数据,其中向受访者提供了 7 个可能的答案,并且必须选择其中的 3 个。 所以我拥有的是一组 7 个虚拟变量,如果受访者选择了答案,则编码为 1,否则编码为 0。
a1 a2 a3 a4 a5 a6 a7
0 0 1 1 0 1 0
1 1 1 0 0 0 0
0 1 0 0 1 0 1
我想将这些假人转换回三个变量,每个变量都包括给出的答案。就像这样:
choice1 choice2 choice3
a3 a4 a6
a1 a2 a3
a2 a5 a6
我尝试在整个“a”变量集上使用 tidyverse“gather”
int <- old_df %>% mutate_at(vars(a1:a7),~ ifelse(. == 0,NA,.))
new <- int %>% gather("choice1","present",a1:a7,na.rm = TRUE)
然而,我没有得到我想要的,因为我只有 1 个变量,所有可能的“a”答案。
我还尝试对每个“a”变量使用“gather”,但我还是没有得到我想要的,因为我最终复制了原始数据集(使用字符串变量而不是 1 和 0)。>
任何想法,我怎样才能获得我想要的那种数据?
非常感谢!
解决方法
df_old <- read.table(text = "a1 a2 a3 a4 a5 a6 a7
0 0 1 1 0 1 0
1 1 1 0 0 0 0
0 1 0 0 1 0 1",header = T)
df_old %>% mutate(rowid = row_number()) %>%
pivot_longer(!rowid) %>%
filter(value != 0) %>%
group_by(rowid) %>%
mutate(choice = paste0('choice',seq_len(max(rowSums(df_old))))) %>%
pivot_wider(id_cols = rowid,names_from = choice,values_from = name) %>%
select(-rowid)
# A tibble: 3 x 4
# Groups: rowid [3]
rowid choice1 choice2 choice3
<int> <chr> <chr> <chr>
1 1 a3 a4 a6
2 2 a1 a2 a3
3 3 a2 a5 a7
,
这在 base R
out <- as.data.frame(t(apply(df1,1,function(x) names(x)[x == 1])))
names(out) <- paste0('choice',seq_along(out))
-输出
out
# choice1 choice2 choice3
#1 a3 a4 a6
#2 a1 a2 a3
#3 a2 a5 a7
数据
df1 <- structure(list(a1 = c(0L,1L,0L),a2 = c(0L,1L),a3 = c(1L,a4 = c(1L,0L,a5 = c(0L,a6 = c(1L,a7 = c(0L,1L)),class = "data.frame",row.names = c(NA,-3L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。