如何测试不等级数的因子的不等式?

时间:2017-03-19 03:12:42

标签: r

例如,假设您正在计算80个残基肽中的所有相同残基,其中当残基出现在另一个肽中的相同位置时发生匹配。但问题是,水平的数量可能不一样,因为代表肽的一些字母[A-Z]将存在于一个肽中但不存在于下一个肽中。为简单起见,假设我们在所有三个肽中寻找完全相同的残基(字母在这些相同的位置匹配),因此答案是BOOLEAN TRUE或FALSE语句,其中TRUE如果它们都匹配则为FALSE,如果它们是不符合。同样,问题是因素的数量不同,因此您无法测试peptide_x == peptide_y。

编码:

> peptide_x <- as.factor(sample(LETTERS[1:26], replace = TRUE, 80))
> peptide_y <- as.factor(sample(LETTERS[1:26], replace = TRUE, 80))
> peptide_z <- as.factor(sample(LETTERS[1:26], replace = TRUE, 80))

您可以使用以下命令检查肽中缺少26个残基字母表中的哪些字母:

> setdiff(LETTERS[1:26], peptide_x)

[1]&#34; Y&#34;

所以我们看到&#34; Y&#34; (酪氨酸)缺失。当您创建随机肽时,您可能会遗漏另一个或两个字母,并且可以对任何肽进行此操作。

如果我尝试比较具有相同等级的因素,则可行:

> x <- c("M", "N", "A", "Q", "C")
> y <- c("N", "M", "A", "C", "Q") 
> xy_frame <- data.frame(x,y)
> xy_frame
> x == y

[1]错误,错误,错误 正如你所看到的,A的匹配,所以第三个元素&#34; A&#34;是唯一的事实。

令人震惊的是,这项测试有效:

> x <- c("A", "A", "B", "Q", "C")
> y <- c("A", "Q", "C", "D", "R")
> x == y
[1]  TRUE FALSE FALSE FALSE FALSE

即使因素的数量不一样。所以我想知道我的数据类型是否有问题,这就是我无法测试的原因:

> peptides <- data.frame(peptide_x, peptide_y)
> peptides$peptide_x == peptides$peptide_y

Ops.factor中的错误(多肽$ peptide_x,多肽$ peptide_y):   等级因子是不同的

那么,如果出现问题,我该如何修复我的数据类型,或者我是否正在运行正确的测试?

我只想对非相同因子水平计算为真 - 假。

评论:

%in%无法正常工作,因为......

  

头(peptide_x)   [1]&#34; C&#34; &#34; T&#34; &#34; X&#34; &#34; Z&#34; &#34; M&#34; &#34; A&#34;

     

头(peptide_y)   [1]&#34; R&#34; &#34; G&#34; &#34; T&#34; &#34; U&#34; &#34; G&#34; &#34; U&#34;

     

头部(肽%x%in%peptide_y)   [1] TRUE TRUE TRUE TRUE TRUE TRUE是

例如,每个肽的前6个字母不匹配,但它表示正确!怎么样?

2 个答案:

答案 0 :(得分:2)

使所有级别都存在,即使它们不存在

x <- factor(sample(LETTERS[1:26], replace = TRUE, 80), levels = LETTERS) 
y <- factor(sample(LETTERS[1:26], replace = TRUE, 80), levels = LETTERS) 
z <- factor(sample(LETTERS[1:26], replace = TRUE, 80), levels = LETTERS)

注意我如何设置每个向量中的levels相同,即使有些不存在也没关系

> x==y
 [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[14] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
[27] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[40] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[53]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[66] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
[79] FALSE FALSE
> x==z
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[14] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[27] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[40] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
[53] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[66] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[79] FALSE FALSE
> y==z
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE  TRUE FALSE
[14] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE
[27] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[40] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[53] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[66] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[79] FALSE FALSE

或者,您可以将它们转换为字符并进行比较

答案 1 :(得分:1)

参考此代码:

x <- c("A", "A", "B", "Q", "C")
y <- c("A", "Q", "C", "D", "R")
R> x == y
[1]  TRUE FALSE FALSE FALSE FALSE

这是有效的,因为您正在将字符向量x与字符向量y进行比较。我会跳过这些因素,并使用%in%运算符进行类似的测试:

R> peptide_x <- sample(LETTERS[1:26], replace = TRUE, 80)
R> peptide_y <- sample(LETTERS[1:26], replace = TRUE, 80)

R> peptide_x %in% peptide_y
 [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
[20]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
[39]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
[58]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
[77]  TRUE  TRUE  TRUE FALSE