如何批量更新mlist中值为c("ordered", "factor")的元素为'character'
批量更新mlist中指定类型的元素
你可以通过逻辑索引或replace()函数一次性完成批量更新,两种方法都简洁高效:
方法一:逻辑索引直接赋值
这是最直观的方式,利用%in%判断每个元素是否属于目标类型集合,再批量赋值:
library(tidyverse) # 生成各列类型的向量mlist mlist <- sapply(diamonds, class) # 批量将所有"ordered"或"factor"类型的元素改为"character" mlist[mlist %in% c("ordered", "factor")] <- "character" # 查看更新后的结果 mlist
方法二:使用replace()函数
replace()函数可以直接指定替换位置和替换值,代码更紧凑:
library(tidyverse) mlist <- sapply(diamonds, class) # 批量替换指定类型 mlist <- replace(mlist, mlist %in% c("ordered", "factor"), "character")
补充说明
mlist是sapply()返回的命名字符向量,因此可以直接用逻辑向量作为索引定位需要修改的元素。%in%会逐个检查向量元素是否在c("ordered", "factor")中,返回对应的TRUE/FALSE逻辑值,只有标记为TRUE的位置会被赋值更新。
内容的提问来源于stack exchange,提问作者anderwyang
相关产品推荐
相关产品推荐

