![](/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.