问题描述
对于 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