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

时间:2015-11-07 13:45:00

标签: r logical-operators

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

> 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

(我使用因素来复制我的真实数据)

我做错了什么?如何实现识别类似变量的目标?感谢

1 个答案:

答案 0 :(得分:3)

只做

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

a==b已经返回逻辑向量,我们不需要isTRUE来包装它。

正如@Frank在评论中提到的,最好在character类列之间进行评估,因为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)