我有一个数据框,其中行是人,列是他们在多选项问题中的回答:
df <- data.frame(person = c("A", "B", "C"), question_1 = c(1, 3, 2), question_2 = c(1, 1, 2))
> df
person question_1 question_2
1 A 1 1
2 B 3 1
3 C 2 2
我需要通过以下方式pivot_wider
这个表:原始表的每个值成为一列,新表的值是是否选择了该选项(0=未选择, 1 = 选择)。最终输出应如下所示:
person q1_1 q1_2 q1_3 q2_1 q2_2
1 A 1 0 0 1 0
2 B 0 0 1 1 0
3 C 0 1 0 0 1
>
我尝试过使用pivot_wider(df,names_from = c(question_1,question_2))
,但它不起作用。有什么建议吗?
最佳答案
我们可以在转换为“宽”格式之前先将形状重新调整为“长”格式
library(dplyr)
library(tidyr)
library(stringr)
df %>%
pivot_longer(cols = -person) %>%
mutate(name = str_c('q', str_extract(name, "\\d"), "_", value), value = 1) %>%
pivot_wider(names_from = name, values_from = value, values_fill = 0) %>%
select(gtools::mixedorder(names(.)))
-输出
# A tibble: 3 x 6
# person q1_1 q1_2 q1_3 q2_1 q2_2
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 A 1 0 0 1 0
#2 B 0 0 1 1 0
#3 C 0 1 0 0 1
关于r - 枢轴更广泛的多选项问卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67512856/