我有一个带有因子变量的数据框
> 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
(我使用因素来复制我的真实数据)
我做错了什么?如何实现识别类似变量的目标?感谢
答案 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)