我的问题有两个部分:
首先,我尝试使用“应用”和一个函数来为一个数据框创建多个频率表和交叉表。我想出了如何使它适用于下面包含的小数据框,但是当我尝试将它应用于我的真实数据(str也包含在下面)时,我收到一个错误,“所有参数必须具有相同的长度” .
其次,我很想知道是否有任何其他方法可以使用 purrr 函数或更高效的代码创建多个频率表和交叉表。我对 R 还比较陌生,所以我想总会有更好的方法。作为奖励,使用 ggplot2 将卡方检验以及条形图与每个表一起包括在内会很棒。我无法弄清楚如何将其添加到匿名函数(如下所列)中。也许我太雄心勃勃了,但是学习如何用最少的代码一次性实现所有这些会很棒。
所以下面是基本的示例数据框。我使用 apply 和一个匿名函数以及 table() 来生成除年龄以外的每一列的频率表,然后创建“受影响”与“宠物”、“城市”和“性别”的交叉表。
Affected<-c("Employee","Client","Employee","Volunteer","Volunteer","Client")
Pet<-c("Cat","Cat","Dog","Iguana","Rabbit","Iguana")
Age<-c(20,34,55,53,22,44)
City<-c("Toronto","Vancouver","Montreal","Toronto","Alberta","Montreal")
Sex<-c("Male","Male","Female","Male","Female","Male")
DF<-data.frame(Affected,Pet,Age,City,Sex)
DF%>%select(1:2,4:5)%>%apply(.,2,table)
apply(DF,2,function(x)table(Affected,x))
DF%>%select(1:2,4:5)%>%apply(.,2,function(x)table(Affected,x))
但是,当我尝试将此代码应用于更大的数据框(结构如下)时,我收到错误消息:
表中的错误(受影响,x):所有参数必须具有相同的长度
data.frame': 52 obs. of 3 variables:
$ Affected : Factor w/ 5 levels "Dog","Cat","Fish",..: 3 3 3 3 5 3 3 1 3 3 ...
$ Department.Program : Factor w/ 10 levels "A","B","C","D",..: 10 10 10 10 1 4 NA 10 1 9 ...
$ Where.did.the.incident.occur.: Factor w/ 5 levels "Toronto","Vancouver",..: 3 1 3 3 3 3 3 2 3 3 ...
数据帧被称为 Inc,下面是我尝试生成错误消息的代码。
apply(Inc,2,function(x)table(Affected,x))
我希望通过包含数据框的 str 足以解决问题。