【问题标题】:Identify all combinations of six variables in R识别 R 中六个变量的所有组合
【发布时间】:2015-06-23 02:00:32
【问题描述】:

我有一个包含 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的组合吗?
  • 不,我只是想知道数据中存在的组合

标签: r combinations permutation


【解决方案1】:

您可以使用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)) )    

【讨论】:

  • 好点,但删除代码中空格的编辑是没有根据的,甚至有害。空间提高了人类的可读性。
  • 我想恢复我的赞成票(无意冒犯),但时间已过。我没有其他要编辑的东西
【解决方案2】:

您正在这里寻找interaction

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

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

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

【讨论】:

  • 不幸的是 do.call 不起作用。它所做的只是简单地重复所有 250 种组合。
  • @Rymatt830 - 如果您想要每个组的计数,您需要在上述代码周围使用table - interaction 只会为您提供每行所在组的列表。跨度>
【解决方案3】:

我会使用dplyr 中的group_by() 函数将数据按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())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 2022-11-02
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多