2016-02-26 39 views
1

當我使用表格函數apply時,返回兩個不同的結構。應用與表格不匹配

下面是一些樣本數據

d1 <- data.frame(q1 = c(1,2,3), q2 = c(3,2,1)) 
d2 <- data.frame(q1 = c(1,2,3), q2 = c(3,2,2)) 

d1 <- data.frame(lapply(d1, factor, ordered=TRUE, 
         levels=c(1,2,3), 
         labels=c("Dissatisfied", 
           "Neutral", 
           "Satisfied" 
         ))) 

d2 <- data.frame(lapply(d2, factor, ordered=TRUE, 
         levels=c(1,2,3), 
         labels=c("Dissatisfied", 
           "Neutral", 
           "Satisfied" 
         ))) 

現在,如果我跑的應用功能

apply_1 <- apply(d1,2,table) 
apply_2 <- apply(d2,2,table) 

apply_1是一個很好的表(這是輸出我期待)

str(apply_1) 

但apply_2是一個列表,不是我想要或預期的

str(apply_2) 

我猜這是因爲其中一個因素是不存在的,如D2

的2列,但在運行每個單獨列的表命令值給出我想要的東西

table(d2[ , 1]) 
table(d2[ , 2]) 

我是否需要將apply函數更改爲循環並將所有輸出綁定在一起,或者有什麼方法可以使用表函數很好地進行應用?

回答

2

apply強制d1/2matrix應用功能,它將丟棄您的factor編碼。這意味着您的table結果是d2的不同長度,導致返回list

相反,嘗試:

sapply(d1,table) 

#    q1 q2 
#Dissatisfied 1 1 
#Neutral  1 1 
#Satisfied  1 1 

sapply(d2,table) 

#    q1 q2 
#Dissatisfied 1 0 
#Neutral  1 2 
#Satisfied  1 1 
+0

輝煌,工作就像一個魅力 - 謝謝! – Mist