我有一个数据帧,看起来像这样
data.frame(service=c("1,2,3,4","2,4,5","1,3,4"),
score=c("1,2,1,3","1,1,3","1,1,1"))
a b
1 1,2,3,4 1,2,1,3
2 2,4,5 1,1,3
3 1,3,4 1,1,1
变量SERVICE指的是1-5之间的分类变量,而分数也是前一次服务中每个服务的1-3的分类变量.请注意,每个受访者都使用了不同的服务,因此长度不同,每个变量也不相同
我需要reshape 此数据帧以将分数与每个服务相关联.最终结果将如下所示
data_frame(ind=c(1,1,1,1,2,2,2,3,3,3),
serv=c(1,2,3,4,2,4,5,1,3,4),
score=c(1,2,1,3,1,1,3,1,1,1))
ind serv score
<dbl> <dbl> <dbl>
1 1 1 1
2 1 2 2
3 1 3 1
4 1 4 3
5 2 2 1
6 2 4 1
7 2 5 3
8 3 1 1
9 3 3 1
10 3 4 1
我首先拆分变量服务,以此方式创建所有类别
library("qdapTools","tidyverse")
lst1 <- lapply(strsplit(df$serv, ","), function(x)
replace(x, (! x %in% c("1", "2", "3","4","5")) & !is.na(x), "other"))
lst1_tab<-mtabulate(lst1)%>% setNames(paste0('serv_', names(.)))
df<-cbind(df,lst1_tab)
serv score serv_1 serv_2 serv_3 serv_4 serv_5
1 1,2,3,4 1,2,1,3 1 1 1 1 0
2 2,4,5 1,1,3 0 1 0 1 1
3 1,3,4 1,1,1 1 0 1 1 0
我这样做是为了在以后reshape 长形式的df.然而,并不是所有人都接受了所有的服务.例如,个人1没有接受服务5.因此,我不知道如何划分变量分数以将其与每个服务相关联