2016-04-10 69 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'中的順序是:'紅色','藍色','綠色'和'黃色',並且在打印結果中,順序是:「藍色」,「紅色」,「綠色」和「黃色」 –