如何根据逻辑条件创建逻辑变量?
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)
我有一个包含因子变量的数据框
> 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)