library(tidyverse)
library(forcats)
我有两个简单的数据框(底部的代码),我想通过折叠“动物”列来创建一个新的重新编码变量。我通常用 forcats::fct_collapse 来做这件事。但是,我想创建一个函数来将 fct_collapse 应用于许多具有相同变量的不同数据帧,除了一些可能缺少一个或两个因子级别。例如,在这种情况下,Df2 缺少“Rhino”。
有没有办法可以更改代码(使用 tiyverse),以便将缺少的因子类别返回为 NA?在这个例子中,我知道它是“Rhino”,但在我的真实数据中可能还有其他缺失的级别。除了 forcats::fct_collapse 之外,我对其他选项持开放态度,但我想留在 tidyverse 领域。
REC <- function(Df, Data){
Df %>%
mutate(NEW = fct_collapse(Data, One = c("Cat","Dog","Snake"),
Two = c("Elephant","Bird","Rhino")))
}
REC(Df1,Animal) - this works
REC(DF2,Animal) - this doesn't, it throws an error because of "Rhino"
样本数据:
Animal <- c("Cat","Dog","Snake","Elephant","Bird","Rhino")
Code <- c(101,222,434,545,444,665)
Animal2 <- c("Cat","Dog","Snake","Elephant","Bird")
Code2 <- c(101,222,434,545,444)
Df1 <- data_frame(Code, Animal)
Df2 <- data_frame(Code2, Animal2) %> %rename(Animal = Animal2)