更改缺失值的行类型(第三个变量)

时间:2014-04-11 11:00:51

标签: r ggplot2 line

我试了这么久但仍然不知道该怎么做。我有一个数据框:

year <- c(1995:2012)
salary <- c(702, 873, 1061, 1239, 1706, 1923, 2061, 2133, 2201, 2289, 2380, 2477, 2691, 2943, 3102, 3324, 3399, 3521)
miss <- c(0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
df.salary <- data.frame(year, salary, miss)

情节:

ggplot(df.salary, aes(year, salary)) +
  geom_line(lwd=1, color="#333333") +
  ylim(c(0, 4000)) +
  scale_x_continuous(breaks=1995:2012) 

变量未命中意味着,两个值(1998年和1999年缺失,仅评估它们)。我想在我的情节中使用缺失年份之间的虚线来指出它。 我希望我的情节看起来像:

enter image description here

我该怎么办?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以修改data.frame以获得细分标签:

toExtend <- function(x) c(diff(x),0)==1 |  c(0,diff(df.salary$miss))==-1
df.salary <- df.salary[rep(1:nrow(df.salary), times=ifelse(toExtend(df.salary$miss), 2, 1)),]
df.salary$miss[toExtend(df.salary$miss)] <- 1
df.salary$seg <- cumsum(c(0, diff(df.salary$miss)!=0))

每次&#34; miss&#34; ingness改变时,这都会上升。您现在可以按此分组,并通过更改您的&#34; aes&#34;添加与缺失相对应的线型。到

aes(year, salary, group=as.factor(seg), lty=as.factor(miss))

您可能希望在data.frame中复制行以将细分扩展到彼此 - 您不清楚是否要向外展开miss=1部分,miss=0部分向内,或将每个部分延伸到左侧或右侧,但这样做应该相当简单 - 如果您不知道如何做到这一点,请评估您希望如何缩小差距。