R 当使用table函数时,如果我的某个因子缺少一个级别,如何将表格作为输出而不是列表?
我正在处理一份调查问卷的结果,并希望在一张表格中给出几个相关的是/否问题的回答。对于其中一个问题,所有受访者均回答“否”。在这个问题中,由于缺少一个响应级别,R中的table函数返回一个列表而不是一个表 在回答为“是”的问题中添加因子级别的“是”并不能解决问题。顺便说一句,我下面给出的代码对于回答“是”或“否”的问题很有效 此代码涉及五位受访者回答的三个问题,并说明了我的问卷R 当使用table函数时,如果我的某个因子缺少一个级别,如何将表格作为输出而不是列表?,r,missing-data,R,Missing Data,我正在处理一份调查问卷的结果,并希望在一张表格中给出几个相关的是/否问题的回答。对于其中一个问题,所有受访者均回答“否”。在这个问题中,由于缺少一个响应级别,R中的table函数返回一个列表而不是一个表 在回答为“是”的问题中添加因子级别的“是”并不能解决问题。顺便说一句,我下面给出的代码对于回答“是”或“否”的问题很有效 此代码涉及五位受访者回答的三个问题,并说明了我的问卷 q1 <- c("Yes", "Yes", "Yes", "Yes", "No") q2 <- c("No"
q1 <- c("Yes", "Yes", "Yes", "Yes", "No")
q2 <- c("No", "No", "No", "No", "No") # our culprit
q3 <- c("Yes", "Yes", "No", "No", "No")
意识到因子q2只有一个层次,我写道:
q2 <- factor(q2, levels = c("Yes", "No"))
使用
dplyr
,您可以对每个分组进行计数,然后在展开时使用fill=0
,以获得所需的表格
df%>%聚集(k,v)%>%
计数(k,v)%>%排列(k,n,填充=0)
#一个tibble:2x4
第1季度第2季度第3季度
1号1 5 3
2是4 0 2
我认为最好明确列出所有要测量的值的标签。然后你可以转换成因子并求和
vals <- c("Yes", "No")
df <- data.frame(q1, q2, q3)
sapply(lapply(df, factor, levels=vals), table)
vals如果您使用参数stringsafactors=FALSE
创建df,那么您可以执行table(stack(df))
。您还可以将应用更改为lapply(df,table)
并获得Yesalso的0,以便为您提供参考apply
将因子转换为字符,这就是出现上述问题的原因。运行这两个函数,看看输出是什么:lappy(df,class)
,apply(df,2,class)
感谢您向我指出apply函数将因子转换为字符。第一条评论中的解决方案返回@onyanbu建议的答案。
df <- data.frame(q1, q2, q3)
apply(df, 2, table)
$q1
No Yes
1 4
$q2
No
5
$q3
No Yes
3 2
vals <- c("Yes", "No")
df <- data.frame(q1, q2, q3)
sapply(lapply(df, factor, levels=vals), table)
table(stack(list(q1=q1,q2=q2,q3=q3)))
ind
values q1 q2 q3
No 1 5 3
Yes 4 0 2