定义因子时发出警告:因子中的重复级别已弃用
Warning when defining factor: duplicated levels in factors are deprecated
我在 R 中的雷达图上遇到了一些问题。尽管绘图很好,但我收到以下警告:
> source('~/.active-rstudio-document')
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
> radar
Warning messages:
1: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
2: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
我在其他帖子中看到了同样的错误,但我并不真正理解如何将答案应用到我的数据集...
这是我的数据集
MSF,C1,2
OCA,C1,6
SIOA,C1,4
CCFF,C1,4
MSF,C2,4
OCA,C2,2
SIOA,C2,6
CCFF,C2,2
MSF,C3,6
OCA,C3,6
SIOA,C3,6
CCFF,C3,6
这是相应雷达图的代码(可能只有我定义数据集的第一部分是相关的,但是是的......这就是我迷路的地方):
colnames(dataset) = c("type", "variable", "value")
dataset$value = as.numeric(dataset$value)
dataset$variable <- factor(dataset$variable, levels = rev(dataset$variable), ordered=TRUE)
# Radar function ------------------------------------------------------------
coord_radar <- function (theta = "x", start = 0, direction = 1) {
theta <- match.arg(theta, c("x", "y"))
r <- if (theta == "x")
"y"
else "x"
ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start,
direction = sign(direction),
is_linear = function(coord) TRUE)
}
# Radar plot ------------------------------------------------------------
radar <- ggplot(dataset, aes(x = variable, y = value, group=type)) +
geom_polygon(aes(group = type, color=type,fill=type), size = 1, alpha=0.1) +
scale_fill_manual(values=cbPalette) +
geom_line(aes(group = type, color=type)) +
scale_colour_manual(values = cbPalette) +
coord_radar()
是的,几乎所有这些都与您的问题无关。
您正在尝试创建具有以下级别的因子:rev(dataset$variable)
。结果:
[1] C3 C3 C3 C3 C2 C2 C2 C2 C1 C1 C1
看看你是如何复制关卡的?您将希望每个级别只按您想要的顺序进行一次。默认是 sort(unique(dataset$variable))
,它给出 C1 C2 C3
,或者你可以使用 rev(unique(dataset$variable)
给出 C3 C2 C1
。
forcats
包有几个方便的函数,可以轻松创建或更改因子及其级别的顺序。
我在 R 中的雷达图上遇到了一些问题。尽管绘图很好,但我收到以下警告:
> source('~/.active-rstudio-document')
Warning message:
In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
> radar
Warning messages:
1: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
2: In `levels<-`(`*tmp*`, value = if (nl == nL) as.character(labels) else paste0(labels, :
duplicated levels in factors are deprecated
我在其他帖子中看到了同样的错误,但我并不真正理解如何将答案应用到我的数据集...
这是我的数据集
MSF,C1,2
OCA,C1,6
SIOA,C1,4
CCFF,C1,4
MSF,C2,4
OCA,C2,2
SIOA,C2,6
CCFF,C2,2
MSF,C3,6
OCA,C3,6
SIOA,C3,6
CCFF,C3,6
这是相应雷达图的代码(可能只有我定义数据集的第一部分是相关的,但是是的......这就是我迷路的地方):
colnames(dataset) = c("type", "variable", "value")
dataset$value = as.numeric(dataset$value)
dataset$variable <- factor(dataset$variable, levels = rev(dataset$variable), ordered=TRUE)
# Radar function ------------------------------------------------------------
coord_radar <- function (theta = "x", start = 0, direction = 1) {
theta <- match.arg(theta, c("x", "y"))
r <- if (theta == "x")
"y"
else "x"
ggproto("CordRadar", CoordPolar, theta = theta, r = r, start = start,
direction = sign(direction),
is_linear = function(coord) TRUE)
}
# Radar plot ------------------------------------------------------------
radar <- ggplot(dataset, aes(x = variable, y = value, group=type)) +
geom_polygon(aes(group = type, color=type,fill=type), size = 1, alpha=0.1) +
scale_fill_manual(values=cbPalette) +
geom_line(aes(group = type, color=type)) +
scale_colour_manual(values = cbPalette) +
coord_radar()
是的,几乎所有这些都与您的问题无关。
您正在尝试创建具有以下级别的因子:rev(dataset$variable)
。结果:
[1] C3 C3 C3 C3 C2 C2 C2 C2 C1 C1 C1
看看你是如何复制关卡的?您将希望每个级别只按您想要的顺序进行一次。默认是 sort(unique(dataset$variable))
,它给出 C1 C2 C3
,或者你可以使用 rev(unique(dataset$variable)
给出 C3 C2 C1
。
forcats
包有几个方便的函数,可以轻松创建或更改因子及其级别的顺序。