我有一个包含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])
这不起作用。任何建议都会很棒!
答案 0 :(得分:3)
您可以使用interaction
或paste( ..., 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())