You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R data.table使用by参数分组绘点异常及分组索引取色实现问题

分组绘制未生效的原因

该问题的核心是points函数的公式调用方式未指定数据源,无法正确读取data.table按by拆分后的分组子集:
你在DT[i, j, by]的j位置使用points(mpg~hp, col="red")时,公式接口默认不会将当前分组的列向量作为输入,实际每次执行都绘制了全量数据集的红色点,多次重复绘制后,仅最后一次分组(mtcars中cyl的默认分组顺序为4、6、8,最后执行的是cyl=8的分组)的绘制效果被保留,所以看起来只有cyl=8的点变为红色。

按分组绘制所有散点的实现方法

两种修改方式都可以实现所有分组的点均绘为红色:

  • 方法1:改用x、y向量传参,直接读取当前分组的列值
dtcars[, points(hp, mpg, col="red"), by=cyl]
  • 方法2:保留公式写法,指定数据源为当前分组子集.SD
dtcars[, points(mpg~hp, data=.SD, col="red"), by=cyl]
额外问题:按分组索引匹配颜色

data.table提供了内置特殊变量.GRP,可以直接返回当前by分组的序号索引,从1开始按分组顺序递增,完全符合你需要的by_index效果:

dtcars[, points(hp, mpg, col=c("red", "blue", "green")[.GRP]), by=cyl]

该代码的效果和你给出的col=c("red", "blue", "green")[as.factor(cyl)]完全一致,注意保证颜色向量的顺序和by分组的顺序对应即可。

内容的提问来源于stack exchange,提问作者rg255

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:54:02