您如何使用 R 为 mtcars 数据找到具有不同级别具有 3 个示例场景的变量的所有可能的唯一成对比较?

问题描述

对于 mtcars 数据,您如何使用 R 找到具有不同级别(3 个示例场景)的变量的所有可能的唯一成对比较?有没有办法在不同的场景下使用 r 代码来做到这一点?

以下是我感兴趣的示例:

示例 1: 我在数据框的 1 列中有 1 个因子变量(即“cyl”),具有 3 个级别(即“4”、“6”和“8”)。受试者只能是一个变量的一个级别,并且所有受试者在给定的 1 列行中都有一些与变量相关的值。有没有一种方法可以使用 R 代码来查找具有 3 个级别的 1 变量的所有唯一 2 度成对比较(例如,mtcars$cyl == 4 和 mtcars$cyl == 5,mtcars$cyl == 4 和mtcars$cyl == 6,等等...)?

示例 2: 我有 1 个因子变量(即“cyl”)具有 3 个级别(即“4”、“6”和“8”)和另一个因子变量(即“Engine”)具有 2 个级别(即“0 = V 形”,“1 = 直”)。主题只能是每个变量的一个级别,并且所有主题都具有与给定的 2 列行中的 2 个变量相关联的值。有没有办法找出 2 个变量的所有独特的 2 度成对比较(例如,mtcars$cyl == 4 和 mtcars$Engine == 0、mtcars$cyl == 6 和 mtcars$Engine == 1等...)使用 R 代码

示例 3: 我有 1 个因子变量(即“cyl”)具有 3 个级别(即“4”、“6”和“8”),另一个因子变量(即“Engine”)具有 2 个级别(即“0 = V 形”、“1 = 直线”)和具有 2 个级别的第三因子变量(即 am)(即“0 = 自动”、“1 = 手动”)。主题只能是每个变量的一个级别,并且所有主题都具有与给定的 3 列行中的 3 个变量相关联的值。有没有办法找出 3 个变量的所有独特的 3 度成对比较(例如,mtcars$cyl == 4 和 mtcars$Engine == 0 和 mtcars$am = 0,mtcars$cyl == 6 和mtcars$Engine == 1 and mtcars$am = 1,etc...) 使用 R 代码

提前致谢。

解决方法

您也可以使用 tidyr 包中的 crossing 函数:

    library(tidyr)
    crossing(mtcars$cyl,mtcars$vs,mtcars$am)
,

不确定您最终要达到的目标,但对于您的第一个示例,您可以使用 combn,对于示例 2 和 3,您可以使用 expand.grid 来获取唯一组合的数据框一个或多个因素的水平:

# Example 1
as.data.frame(t(combn(unique(mtcars$cyl),2)))
#>   V1 V2
#> 1  6  4
#> 2  6  8
#> 3  4  8
# Example 2
expand.grid(cyl = unique(mtcars$cyl),vs = unique(mtcars$vs))
#>   cyl vs
#> 1   6  0
#> 2   4  0
#> 3   8  0
#> 4   6  1
#> 5   4  1
#> 6   8  1
# Example 3
expand.grid(cyl = unique(mtcars$cyl),vs = unique(mtcars$vs),am = unique(mtcars$am))
#>    cyl vs am
#> 1    6  0  1
#> 2    4  0  1
#> 3    8  0  1
#> 4    6  1  1
#> 5    4  1  1
#> 6    8  1  1
#> 7    6  0  0
#> 8    4  0  0
#> 9    8  0  0
#> 10   6  1  0
#> 11   4  1  0
#> 12   8  1  0