首页 > 解决方案 > 将所有其他级别重命名为“其他”

问题描述

我有一个数据框,其中包含我在去年完成的所有调用。在“姓名”列下,有我的联系人列表中人员的姓名。在 R 中,此列包含 30 个因素,我只想有 3 个因素:MomDadBestFriendOthers。我正在使用这个片段:

library(plyr) call$Name <- mapvalues(call$Name, from = 'Mikey Mouse', to = 'BFF') call$Name <- mapvalues(call$Name, from = c('Rocky Balboa','Uma Thurman'), to = c('Dad','Mom'))

我如何将除这 3 个之外的所有其他级别重命名为Other

标签: r

解决方案


我们可以首先创建一个level'Others'(假设它是a factor),将levels不是('nm1')%in%的向量分配给'Other'levels

levels(call$Name) <- c(levels(call$Name), 'Other'))
levels(call$Name)[!levels(call$Name %in% nm1] <- 'Other'

或者另一个选项是recode从中dplyr也可以.default选择将不在向量中的其他级别指定为给定值

library(dplyr)
recode(call$Name, `Mikey Mouse` =  'BFF', `Rocky Balboa` = 'Dad',
    `Uma Thurman` = 'Mom', .default = 'Other')

数据

set.seed(24)
call <- data.frame(Name = sample(c('Mikey Mouse', 'Rocky Balboa',
  'Uma Thurman', 'Richard Gere', 'Rick Perry'), 25, replace = TRUE))
nm1 <- c('Mickey Mouse', 'Rocky Balboa', 'Uma Thurman')

推荐阅读