在R语言中合并数据框因子水平及删除特定因子实例
没问题,这两个需求在R里都能轻松实现,我分两部分给你详细说明:
1. 合并"Fatal injury"和"Non-fatal injury"为一个新水平
最简洁的方式是用forcats包的fct_collapse()函数(属于tidyverse生态,处理因子变量特别顺手):
# 先安装并加载forcats(如果还没装的话) install.packages("forcats") library(forcats) # 合并指定水平为新的"Injury"水平 OttawaCollisions$Collision_Classification <- fct_collapse( OttawaCollisions$Collision_Classification, "Injury" = c("Fatal injury", "Non-fatal injury") ) # 验证结果 head(OttawaCollisions$Collision_Classification) levels(OttawaCollisions$Collision_Classification)
如果不想额外安装包,用基础R也能搞定:
# 直接修改因子水平 target_levels <- c("Fatal injury", "Non-fatal injury") levels(OttawaCollisions$Collision_Classification)[levels(OttawaCollisions$Collision_Classification) %in% target_levels] <- "Injury"
操作完成后,你的因子变量就只剩Injury和P.D. only两个水平啦。
2. 直接删除所有属于"Fatal injury"的实例
这个需求可以用基础R的subset()函数,或者tidyverse的filter()函数,两种方法都能直接移除对应行:
# 基础R方法 OttawaCollisions_clean <- subset(OttawaCollisions, Collision_Classification != "Fatal injury") # tidyverse方法(需要加载dplyr) library(dplyr) OttawaCollisions_clean <- OttawaCollisions %>% filter(Collision_Classification != "Fatal injury")
如果删除后想清理掉空的因子水平,可以再加一步:
OttawaCollisions_clean$Collision_Classification <- droplevels(OttawaCollisions_clean$Collision_Classification)
内容的提问来源于stack exchange,提问作者hmnoidk
相关产品推荐
相关产品推荐

