比较数据帧中不同级别的因子

问题描述 投票:1回答:2

我正在尝试比较数据框内的两个因素以创建新变量。这些因素有不同的水平,这会引发错误。

这里是可复制的示例

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)库(...

r dplyr r-factor forcats
2个回答
1
投票

==不适用于factor类。一种选择是转换为character并进行元素比较,或者如果要比较levelssortlevels,则进行比较并用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))

1
投票

您只需要将一个因素转换为字符,而不是全部。

© www.soinside.com 2019 - 2024. All rights reserved.