未使用的添加因子水平

问题描述 投票:1回答:1

我有一个简单的问题,我无法解决:我想用因子绘制data.frame(一个月),其中有时水平会丢失。 R属性仅是现有的级别,因此如果存在一个,两个或更多级别,我的图将有所不同。

这里举个例子:

    library(ggplot2)
    library(reshape2)

f             <- factor(c("Free", "Work"))
mon           <- as.data.frame(matrix(as.factor(rep(f[2], times = 8)), nrow = 4)) 
colnames(mon) <- c("A", "B")

mt    <- t(as.matrix(rev(data.frame(as.matrix(mon))))) #  change order of y
m     <- melt(mt)

col   <- c("azure",  "orange")

ggplot(m, aes(x = Var2, y = Var1, fill = value)) +
  geom_tile(colour="grey10") +
  scale_fill_manual(values = col, labels = f, name = NULL) +
  theme(panel.background = element_rect(fill = "white"), axis.ticks = element_blank()) +
  theme(axis.title.x = element_blank(), axis.title.y = element_blank()) 

正如人们所看到的,我将2个因子的第二个元素“工作”归因于这些元素,但它绘制了“自由”。令人不安的是,mon的因子只有1个级别,而不是2个可能的级别。如果我将多个级别归因于mon,它会给出另一个图:

mon   <- as.data.frame(matrix(as.factor(rep(c(f[1], f[2]), times = 4)), nrow = 4))

..,然后重新运行该图。即使从最初的两个级别中进行选择,也无法分配另一个级别:

mon[1,1] <- f[1]

我用levelsrelevelorder等做了很多尝试,但没有成功。有人有主意吗?

我有一个无法解决的简单问题:我想绘制一个带因子的data.frame(一个月),其中有时缺少水平。 R属性仅是现有的级别,因此如果...

r ggplot2 r-factor
1个回答
0
投票

矩阵无法容纳因子。将factor放入matrix时,它会被强制为character,并且未使用的电平会丢失。出于这个原因(以及其他类转换),as.data.frame(matrix(...)))是一个坏习惯。

© www.soinside.com 2019 - 2024. All rights reserved.