微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何重建具有多项选择的分类变量 数据

如何解决如何重建具有多项选择的分类变量 数据

我有以下问题。我正在分析问卷中的数据,其中向受访者提供了 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 举报,一经查实,本站将立刻删除。