当使用数据帧的子集时,为什么因子着色失败?

时间:2016-07-15 15:42:15

标签: r plot

我几天来一直在寻找这个问题的答案,但是没有找到答案,并且认为是时候来这里并自己发表一个问题了。我使用带有read.csv()标记的as.is=TRUE读取了数据框。

x$night <- as.Date(x$night)
x$gsub_version <- as.numeric(x$gsub_version)
x$gsub_version <- x$gsub_version + 1
head(x)
night      filter      mag     mag_err gsub_version
2013-10-08      B 17.67273 0.003226886            1
2013-10-08      B 17.80228 0.003165991            2

为了节省空间,我剪切了结果。我想用filter=='V'col=factor(x$gsub_version)绘制数据。

plot(mag ~ night, data=x[x$filter=="V",], ylim=c(21,17), col=factor(x$gsub_version))

不幸的是,在某一点之后,这会产生plot这个颜色不正确的颜色。当我包含为filter变量创建专用数据框的额外步骤时,该图看起来是正确的。

y <- x[x$filter=="V",]
plot(mag ~ night, data=y, ylim=c(21,17), col=factor(y$gsub_version))

这是生成的new plot。新图正确使用gsub_version的值。我的问题是双重的:考虑到y由用于制作第一个图的相同子集组成,以及为什么第一个方法失败,是什么使这两种方法不同?

感谢您抽出宝贵时间阅读本文。

1 个答案:

答案 0 :(得分:0)

评论中提到了这个问题。添加此答案以说明此类事情使用data.table

的简单程度
library(data.table)
setDT(x) #convert from data.frame to data.table

x[filter == "V", plot(mag ~ night, ylim = c(21, 17), col = factor(gsub_version))]

干净,透明,没有跟踪哪个向量被子集化的混乱 - 所有子集都在[]的第一个参数中完成。