我正在尝试比较数据框内的两个因素以创建新变量。这些因素有不同的水平,这会引发错误。
这里是可复制的示例
library(dplyr)
library(forcats)
mtcars %>%
select(gear, carb) %>%
mutate_at(c("gear", "carb"), ~as_factor(.)) %>%
mutate(gear_vs_carb = gear == carb)
这是错误:
Error in Ops.factor(gear, carb) : level sets of factors are different
我知道我可以通过将因子转换为字符或数字和/或通过将未使用的级别添加到因子以使级别匹配来进行比较。 How can I compare two factors with different levels?
但是是否可以直接与原始因素进行比较?
输出的外观应与]相同>
mtcars %>% select(gear, carb) %>% mutate(gear_vs_carb = gear == carb)
谢谢您的帮助!
我正在尝试比较数据框内的两个因素以创建新变量。这些因素有不同的水平,这引发了错误。这是可复制的示例库(dplyr)库(...
==
不适用于factor
类。一种选择是转换为character
并进行元素比较,或者如果要比较levels
,sort
和levels
,则进行比较并用all
包装]
library(dplyr)
mtcars %>%
select(gear, carb) %>%
mutate_at(c("gear", "carb"), ~as_factor(.)) %>%
mutate(gear_vs_carb = all(sort(levels(gear)) == sort(levels(carb))))
#or use intersect
# mutate(gear_vs_carb = length(intersect(levels(gear),
# levels(carb))) == nlevels(gear))
您只需要将一个因素转换为字符,而不是全部。