确定R中六个变量的所有组合

时间:2015-06-23 02:00:33

标签: r combinations permutation

我有一个包含6个变量和250个观察结果的数据框,如下所示:

   id    Var1    Var2    Var3    Var4    Var5    Var6 **

   1     yes     yes     yes     no      yes     yes
   2     no      no      yes     yes     no      yes
   ...
   250   no      yes     yes     yes     yes     yes

我想识别数据中存在的所有变量组合。例如,我知道有20个观察结果"是"对于每个变量。

我正在进行同行分组分析,并希望根据这些是/否变量对观察进行分组。使用"是"进行了20次观察。每个变量将为#1组,其他20个观测值为Var1 = yes和Var2:Var6 = no将为#2组等...

我试图在plyr中使用count,如下所示:

> count(dataframe[,-1])

这不起作用。任何建议都会很棒!

3 个答案:

答案 0 :(得分:3)

您可以使用interactionpaste( ..., sep="_")进行组合,但之后您需要对它们进行一些操作。将它们split分成不同的类别(这将保留标识)或将它们与table(或两者)制表。

 int_grps <- split( dataframe[,1], interaction( dataframe[,-1], drop=TRUE) )

 int_counts <- table( interaction( dataframe[,-1], drop=TRUE ) )

如果您只想枚举存在的组合,则代码可以是:

names(table(interaction( dataframe[,-1], drop=TRUE)) )    

答案 1 :(得分:1)

您在这里寻找interaction

with (yourdata, interaction (Var1, Var2, Var3, Var4,Var5, Var6 ))

或者, 正如@thelatemail所建议的那样:

do.call(interaction,c(yourdata[-1],drop=TRUE))

答案 2 :(得分:1)

我会使用group_by()中的dplyr功能按Var1, Var2, ..., Var6对数据进行分组。然后,您可以使用summarise()查找每个组合发生的次数。

library(dplyr)

df <- read.table(text = 
"id    Var1    Var2    Var3    Var4    Var5    Var6
   1     yes     yes     yes     no      yes     yes
   2     no      no      yes     yes     no      yes
   3     no      no      yes     yes     no      yes
   250   no      yes     yes     yes     yes     yes
", header = TRUE, stringsAsFactors = FALSE)

df %>%
  group_by(Var1, Var2, Var3, Var4, Var5, Var6) %>%
  summarise(n_occur = n())