求助:R语言绘制箱线图时如何去除多余NPS因子
解决箱线图多余因子显示的问题
嘿,我来帮你搞定这个箱线图的问题!你遇到的情况是虽然尝试了drop=T和droplevels(),但因为没有先筛选目标数据,因子水平还是保留了整个数据集的所有类别,导致图里出现多余的因子标签。下面给你两个靠谱的解决方案:
方法一:先筛选目标子集再绘图(推荐)
这种方式更清晰,也能避免attach()带来的环境变量混乱(真心不推荐用attach(),很容易出变量冲突的问题):
# 读取数据,不用attach NPS <- read.csv(choose.files(), header = TRUE) # 筛选出仅包含HAFREN1的数据集 NPS_hafren <- subset(NPS, site.id == "HAFREN1") # 彻底移除无用的因子水平 NPS_hafren$site.id <- droplevels(NPS_hafren$site.id) # 绘制箱线图,指定data参数明确数据来源 boxplot(K.CM.DAY ~ site.id, data = NPS_hafren, las = 3, mar = c(13,4,2,2))
方法二:直接在绘图时筛选并处理因子
如果不想单独创建子集,可以直接在boxplot()里完成筛选和因子清理:
NPS <- read.csv(choose.files(), header = TRUE) # 仅保留HAFREN1的site.id并移除多余因子水平,再绘图 boxplot(K.CM.DAY ~ droplevels(site.id[site.id == "HAFREN1"]), data = NPS, las = 3, mar = c(13,4,2,2))
为什么之前的尝试没生效?
你之前用drop=T或droplevels()的时候,应该是直接作用在整个数据集的site.id列上,但整个数据集里还存在其他site.id的行,所以因子水平不会被移除。只有当你筛选出仅包含HAFREN1的行后,再用droplevels()才能彻底删掉那些没用的因子类别。
内容的提问来源于stack exchange,提问作者francis
相关产品推荐
相关产品推荐

