r-多重选择问卷
我有一个数据框,其中行是人,列是他们在多个选项问题中的回答方式:r-多重选择问卷,r,dplyr,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
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\u-wider(df,names\u-from=c(问题1,问题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
#一个tible:3 x 6
#人员q1_1 q1_2 q1_3 q2_1 q2_2
#
#1 A 10 0 1 0
#2B00110
#3C010101
在base R中,您可以执行以下操作:
with(stack(df[-1]), table(cbind(df[1], q = sprintf("q%s_%d", gsub("\\D", "", ind), values))))
q
person q1_1 q1_2 q1_3 q2_1 q2_2
A 1 0 0 1 0
B 0 0 1 1 0
C 0 1 0 0 1
with(stack(df[-1]), table(cbind(df[1], q = sprintf("q%s_%d", gsub("\\D", "", ind), values))))
q
person q1_1 q1_2 q1_3 q2_1 q2_2
A 1 0 0 1 0
B 0 0 1 1 0
C 0 1 0 0 1