我的问题分为两部分:
首先,我试图使用"申请"和一个函数,以便为数据帧创建多个频率表和交叉表。我想出了如何让它适用于下面包含的小数据框,但当我尝试将它应用于我的真实数据时(str也包含在下面)我得到一个错误,"所有参数必须具有相同的长度"。
其次,我很想知道是否有其他方法可以使用purrr函数或更高效的代码创建多个频率表和交叉表。我对R来说还是比较新的,所以我想总会有更好的方法。作为奖励,使用ggplot2包括卡方检验以及条形图以及每个表都会很棒。我还没有弄清楚如何将其添加到匿名函数(下面列出)中。也许我过于雄心勃勃,但学习如何用最少的代码一次性实现所有这一切将会很棒。
以下是基本示例数据框。我使用apply和anonymous函数以及table()来生成除了age之外的每个列的频率表,然后创建"受影响的"的交叉表。反对" Pet"," City"和" Sex"。
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足以找出问题所在。