在R中,如何测试两个因素是否相等?

在R中,如何测试两个因素是否相等?,r,r-factor,equivalence,R,R Factor,Equivalence,我正在生成一个具有不同级别的因素的大列表,我希望能够检测到其中两个因素何时定义了相同的分区。例如,我希望检测到以下各项相互等效: x1 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a")) x2 <- factor(c("c", "c", "b", "b", "a", "a", "c", "c")) x3 <- factor(c("x", "x", "y", "y", "z", "z", "x", "x")) x4 <-

我正在生成一个具有不同级别的因素的大列表,我希望能够检测到其中两个因素何时定义了相同的分区。例如,我希望检测到以下各项相互等效:

x1 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a"))
x2 <- factor(c("c", "c", "b", "b", "a", "a", "c", "c"))
x3 <- factor(c("x", "x", "y", "y", "z", "z", "x", "x"))
x4 <- factor(c("a", "a", "b", "b", "c", "c", "a", "a"), levels=c("b", "c", "a"))

x1我想你应该确定双向列表的填充级别数与单向分类的填充级别数相同。
interaction
中的默认设置是表示所有级别,即使未填充,但设置drop=TRUE会更改它以适合您的用途:

> levels (interaction(x1,x2, drop=TRUE) )
[1] "c.a" "b.b" "a.c"
> length(levels(x1) ) == length(levels(interaction(x1,x2,drop=TRUE) ) )
[1] TRUE
泛化将查看
all()


我发现用
表(x1,x2)
可视化这个方法很有用。您可以看到,每一列(和每一行)只有一个非零条目。要以编程方式使用
table(x1,x2)
,您需要
sum(table(x1,x2)!=0)
之类的东西。对于大向量,交互
可能会很慢,而使用
粘贴
可以加快交互速度。我总是愿意学习新东西,但我通过观看结构良好的演示来更好地做到这一点。
 all( length(levels(x1) ) == length(levels(interaction(x1,x2,drop=TRUE) ) ),
      length(levels(x1) ) == length(levels(interaction(x1,x3,drop=TRUE) ) ),
      length(levels(x1) ) == length(levels(interaction(x1,x4,drop=TRUE) ) ) )
#[1] TRUE