2015-11-29 44 views
2

我有一個很大的變量數據框。 許多類似於scale的答案和觀察屬於它們的學校都是邏輯變量(並且可以包括重疊)。如何在R中創建應急表?

例子:

Q1 <- c(1,2,2,4,3,5) 

Q2 <- c(3,4,3,5,4,5) 

A <- c(TRUE,FALSE,TRUE,TRUE,FALSE,TRUE) 

B <- c(FALSE,TRUE,FALSE,TRUE,FALSE,FALSE) 

df <- data.frame(Q1,Q2, A, B) 

我想輸出是一個偶然性表:

Q1 

1 2 3 4 5 

A 1 1 0 1 1 

B 0 1 0 1 0 

在那裏我可以做學校之間的chi2測試 - 在這裏AB。我沒有嘗試過的作品。

我想有可能在網上閱讀的答案,但我缺乏認識它的知識!

回答

2

我們可以使用dplyr/tidyr。我們按'Q1'進行分組,使用summarise_each獲得'A','B'列的sum,使用gather將「寬」轉換爲「長」格式,並用「傳播」將其重新整形爲「寬」。

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(Q1) %>% 
    summarise_each(funs(sum(.)), A:B) %>% 
    gather(Var, Val,-Q1) %>% 
    spread(Q1, Val) 

#  Var  1  2  3  4  5 
# (fctr) (int) (int) (int) (int) (int) 
# 1  A  1  1  0  1  1 
# 2  B  0  1  0  1  0 

一個base R選項xtabs轉換爲long格式

d1 <- data.frame(Q1= rep(Q1,2), Var= rep(names(df)[3:4], 
      each=nrow(df)), Val=unlist(df[3:4])) 
xtabs(Val~Var+Q1, d1) 
#  Q1 
#Var 1 2 3 4 5 
# A 1 1 0 1 1 
# B 0 1 0 1 0 
+0

喜後,這是不是一個真正的評論,但一個問題:在安裝軟件包我找不到tidyr。我在那裏找到了dplyr並安裝它。我把鏡子設置到新西蘭(不是我認爲那應該很重要)。 –

+0

@SarahR當你做'install.packages('tidyr')'這條消息是什麼?雲鏡子通常應該有。 – akrun

+0

我只查了一下。打字安裝..給了消息 警告消息: 軟件包'tidyr'不可用(對於R版本3.0.3) 我猜爲什麼我找不到它。 你的其他建議很好。 –