![](/img/trans.png)
[英]How do I neatly present the output of different combinations of two factors in a table in r?
[英]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.