您如何使用 R 为 mtcars 数据找到所有可能的变量与不同级别(具有 3 个示例场景)的成对比较?
How do you find all possible unique pairwise comparisons of variables with various levels (with 3 example scenarios) using R for the mtcars data?
您如何使用 R 对 mtcars 数据找到所有可能的变量与不同级别(具有 3 个示例场景)的成对比较?有没有办法在不同的场景下使用 r 代码来做到这一点?
以下是我感兴趣的示例:
示例 1:
我有 1 个因子变量(即“cyl”)和 3 个级别(即“4”、“6”和“8”),位于数据框的 1 列中。主题只能是一个变量的一个级别,并且所有主题都有一些与给定行 1 列中的变量相关联的值。有没有办法使用 R 代码找到这个 1 变量与 3 个级别的所有唯一 2 度成对比较(例如,mtcars$cyl == 4 和 mtcars$cyl == 5,mtcars$cyl == 4 和mtcars$cyl == 6, 等等...)?
示例 2:
我有 1 个因子变量(即“cyl”)和 3 个水平(即“4”、“6”和“8”)和另一个因子变量(即“引擎”)和 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”),另一个因子变量(即“引擎”)有 2 个水平(即“0 = V 形”,“1 = 直线”),以及具有 2 个级别(即“0 = 自动”,“1 = 手动”)的第三个因子变量(即 am)。主题只能是每个变量的一个级别,并且所有主题都具有与 3 列给定行中的 3 个变量相关联的值。有没有办法找出 3 个变量的所有唯一 3 度成对比较(例如,mtcars$cyl == 4 和 mtcars$Engine == 0 和 mtcars$am = 0,mtcars$cyl == 6 和mtcars$Engine == 1 和 mtcars$am = 1,等等……)使用 R 代码?
提前致谢。
不确定您最终想要实现什么,但是对于您的第一个示例,您可以使用 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
您还可以使用 tidyr
包中的交叉函数:
library(tidyr)
crossing(mtcars$cyl, mtcars$vs, mtcars$am)
您如何使用 R 对 mtcars 数据找到所有可能的变量与不同级别(具有 3 个示例场景)的成对比较?有没有办法在不同的场景下使用 r 代码来做到这一点?
以下是我感兴趣的示例:
示例 1: 我有 1 个因子变量(即“cyl”)和 3 个级别(即“4”、“6”和“8”),位于数据框的 1 列中。主题只能是一个变量的一个级别,并且所有主题都有一些与给定行 1 列中的变量相关联的值。有没有办法使用 R 代码找到这个 1 变量与 3 个级别的所有唯一 2 度成对比较(例如,mtcars$cyl == 4 和 mtcars$cyl == 5,mtcars$cyl == 4 和mtcars$cyl == 6, 等等...)?
示例 2:
我有 1 个因子变量(即“cyl”)和 3 个水平(即“4”、“6”和“8”)和另一个因子变量(即“引擎”)和 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”),另一个因子变量(即“引擎”)有 2 个水平(即“0 = V 形”,“1 = 直线”),以及具有 2 个级别(即“0 = 自动”,“1 = 手动”)的第三个因子变量(即 am)。主题只能是每个变量的一个级别,并且所有主题都具有与 3 列给定行中的 3 个变量相关联的值。有没有办法找出 3 个变量的所有唯一 3 度成对比较(例如,mtcars$cyl == 4 和 mtcars$Engine == 0 和 mtcars$am = 0,mtcars$cyl == 6 和mtcars$Engine == 1 和 mtcars$am = 1,等等……)使用 R 代码?
提前致谢。
不确定您最终想要实现什么,但是对于您的第一个示例,您可以使用 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
您还可以使用 tidyr
包中的交叉函数:
library(tidyr)
crossing(mtcars$cyl, mtcars$vs, mtcars$am)