繁体   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