"所有参数必须具有相同的长度"使用函数创建多个交叉表和频率表时出错

时间:2016-06-30 04:25:46

标签: r dplyr purrr

我的问题分为两部分:

首先,我试图使用"申请"和一个函数,以便为数据帧创建多个频率表和交叉表。我想出了如何让它适用于下面包含的小数据框,但当我尝试将它应用于我的真实数据时(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足以找出问题所在。

0 个答案:

没有答案