r - 枢轴更广泛的多选项问卷

标签 r dplyr

我有一个数据框,其中行是人,列是他们在多选项问题中的回答:

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/

相关文章:

r - 无法使用 plyr 包和使用列表

使用 SVM 模型进行预测时,R 返回因子(0)

在 R 中重新排序单列,而不指定所有列

r - R 中的波浪号 (~.)

r - 如何根据逻辑列的条件从数字列转发填充

r - 多项选择题最低零分的 Moodle 考试

r - 如何在 R 中并行化包含稀疏矩阵的算法

r - 将函数应用于同一组中的所有对

r - 使用没有轮廓和颜色的灰色点制作点图来突出显示某些点

r - 从 dplyr 中的日期范围计算每年的观测值