如何根据逻辑条件创建逻辑变量?

How to create logical variable based on logical condition?

我有一个包含因子变量的数据框

> a <- c("a", "b", "c")
> b <- c("c", "b", "a")
> df <- as.data.frame(cbind(a,b))
> df$a <- as.factor(df$a)
> df$b <- as.factor(df$b)
> df
  a b
1 a c
2 b b
3 c a

我根据 var a 和 var b 的相似性创建了新的逻辑变量。

> df$result <- isTRUE(df$a == df$b)

但我得到的结果是:

> df
  a b result
1 a c  FALSE
2 b b  FALSE
3 c a  FALSE

如我所料

> df
  a b result
  1 a c  FALSE
  2 b b  TRUE
  3 c a  FALSE

(我正在使用因子来复制我的真实数据)

我做错了什么?我怎样才能实现识别相似变量的目标?谢谢

随心所欲

df$result <- with(df, a==b)
df
#  a b result
#1 a c  FALSE
#2 b b   TRUE
#3 c a  FALSE

a==b 已经 returns 一个逻辑向量,我们不需要 isTRUE 包装它。

正如@Frank 在评论中提到的,最好在 character class 列之间进行评估,因为 factor 级别的差异可能会导致错误。我们可以将 factor 转换为 character 以评估

 with(df, as.character(a)==as.character(b))

或使两列中的级别相同

 Un1 <- union(levels(df$a), levels(df$b))
 df[] <- lapply(df, factor, levels=Un1)
 with(df, a==b)