在R中多个布尔或非布尔列的频率

3

我是一个R语言的新手。我有一个数据框(使用read.csv导入),其中包含200多列和100多行,这些行列是调查结果。因此,一列或一组列代表问题的答案。我有两个问题。

a)名称为“Q1”,“Q2”...“Q9”的列包含布尔值(是/否)。创建频率表的命令是什么?它应该像这样(即:每列中所有行的真/假频率)。


频率表命令:table(df$Q1, df$Q2, ..., df$Q9)
        q1     q2    q3    ...
true    5      99     11
false   95      1     89

b) 名为“P1”、“P2”......“P9”的列包含来自1至5的规模(“同意”......“不同意”)的值。创建一个频率表的命令是什么,它看起来像这样(即计算每列所有行中1、2、...5出现次数的计数)

命令如下: ```R table(data.frame(lapply(df[, c("P1","P2","P3","P4","P5","P6","P7","P8","P9")], factor))) ``` 其中,df是数据框名。
        p1      p2     p3  ....
1        1        4     5
2        4       45     7
3       78       34     6
4        5       55     8
5        4       22    67  ....
1个回答

3

数据:

df = data.frame(q1=c(F,T,T),q2=c(T,F,F),q3=rep(T,3), p1=c(1,2,1), p2=c(3,4,5), p3=c(4,4,2))

你可以尝试以下方法:
library(qdapTools)
t(mtabulate(df[grep('q',names(df), value=T)]))

#      q1 q2 q3
#FALSE  1  2  0
#TRUE   2  1  3

t(mtabulate(df[grep('p',names(df), value=T)]))
#  p1 p2 p3
#1  2  0  0
#2  1  0  1
#3  0  1  0
#4  0  1  2
#5  0  1  0

太好了!谢谢,还提到了grep(),非常有帮助! - Phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接