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
相关产品推荐
相关产品推荐

