2016-04-10 62 views
0

我需要分析调查数据以获得多问题变量的频率。我正在使用this R package处理R中的多选择数据

我知道我需要使用'multi.split'函数来创建我将要使用的变量。但我需要知道如何才能使其参考不在数据集中的答案,这意味着答案是原始问题的一部分,但未在调查期间选择,因此应显示值为0.

实施例: 我有以下差强人意的答案:

"red", "blue", "green" and "yellow" 

和我的数据是(如在该示例中):

v <- c("red/blue","green","red/green","blue/red") 

当我运行下面的命令:

multi.table(multi.split(v)) 

我得到以下结果:

 n  %multi 
v.blue 2  50 
v.red 3  75 
v.green 2  50 

,但我想获得:

  n  %multi 
v.blue 2  50 
v.red 3  75 
v.green 2  50 
v.yellow 0  0 

我如何能做到这一点任何想法?

+0

如果您还没有尝试过,'memisc'软件包有用于调查分析的有用工具。 –

回答

0

我从来没有使用过这个包,但我会试试看。

功能multi-split()产生data.frame所以如果你想要得到的统计数据之前添加另一列,你可以这样做以下:

v <- c("red/blue","green","red/green","blue/red") 
a <- multi.split(v) 
a$v.yellow <- 0 
multi.table(a) 


## > multi.table(a) 
## n %multi 
## v.blue 2  50 
## v.red 3  75 
## v.green 2  50 
## v.yellow 0  0 

更新 更宽泛的版本会去的东西像那样。

1. wanted.data是您在输出中始终需要的列名字符。 2. col.to.add是不在a data.frame中的列。 3.然后将0分配给不存在的列。 4.最后对列进行排序,以便我们始终以相同的顺序排列这些列。

library(questionr) 
v <- c("red/blue","green","red/green","blue/red") 
wanted_data <- c("v.red","v.blue","v.green","v.yellow") 

a <- multi.split(v) 
col.to.add<- wanted_data[!(wanted_data%in% colnames(a))] 
a[col.to.add] <- 0 
a[,order(colnames(a))] 
multi.table(a) 

## > multi.table(a) 
## n %multi 
## v.blue 2  50 
## v.red 3  75 
## v.green 2  50 
## v.yellow 0  0 
+0

有什么办法让它更通用?我需要保留标签排序,以便如果我的标签是:“红色”,“蓝色”,“绿色”和“黄色”,表格中的列将始终为(红色,蓝色,绿色和黄色)重新评估数据集的排序方式或哪些标签是数据集的一部分。谢谢 –

+0

@Shlomi我也没有使用过这个软件包,但它听起来像是你想要一个有序的因素。请输入'?factor'获取更多相关信息。 – Frank

+0

@djj感谢这个例子,应该设置列顺序,因为我看到在'wanted_data'中的顺序是:'红色','蓝色','绿色'和'黄色',并且在打印结果中,顺序是:“蓝色”,“红色”,“绿色”和“黄色” –