簡體   English   中英

使用表功能時如何獲取表而不是列表作為輸出,而我的因素之一是缺少水平?

[英]How do I get a table as output instead of a list when using the table-function and one of my factors is missing a level?

我正在處理調查表的結果,並希望在一個表格中顯示幾個相關的是/否問題的答案。 對於這些問題之一,所有受訪者都回答“否”。 似乎由於此問題中缺少一個答復級別,R中的表函數返回一個列表而不是一個表。

以零個“是”響應向問題中添加因子級別“是”並不能解決問題。 順便說一句,我在下面提供的代碼對於回答者回答“是”或“否”的問題非常有效。

該代碼涉及五個答復者回答的三個問題,並說明了我的調查問卷。

q1 <- c("Yes", "Yes", "Yes", "Yes", "No")
q2 <- c("No", "No", "No", "No", "No") # our culprit
q3 <- c("Yes", "Yes", "No", "No", "No")

我希望根據這些數據創建下表:

     q1  q2  q3
Yes   4   0   2
No    1   5   3

意識到因子q2只寫了一個級別:

q2 <- factor(q2, levels = c("Yes", "No"))

我將問題向量組合到一個數據框中,並將表函數應用於其列:

df <- data.frame(q1, q2, q3)
apply(df, 2, table)

table-function的實際輸出不是上面的表,而是下面的列表:

$q1

 No Yes 
  1   4 

$q2

No 
 5 

$q3

 No Yes 
  3   2

使用dplyr ,您可以計算每個分組,然后在擴展時使用fill=0以獲得所需的表。

df %>% gather(k,v) %>% 
  count(k,v) %>% spread(k,n,fill=0)

# A tibble: 2 x 4
  v        q1    q2    q3
  <chr> <dbl> <dbl> <dbl>
1 No        1     5     3
2 Yes       4     0     2
table(stack(list(q1=q1,q2=q2,q3=q3)))

      ind
values q1 q2 q3
   No   1  5  3
   Yes  4  0  2

我認為最好在要度量的所有值中明確列出標簽。 然后,您可以將其轉換為因子並求和

vals <- c("Yes", "No")
df <- data.frame(q1, q2, q3)
sapply(lapply(df, factor, levels=vals), table)

在這里,內部lapply為所有列表創建具有適當級別的因子,然后sapply運行table()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM