0

我的代码基于stackoverflow 上的这个示例。我的第一次尝试效果很好,如下所示: 在此处输入图像描述

然后我尝试对三个组做同样的事情。我是这样分组的:

df.m <- transform(df.m, facet=ifelse(df.m$variable %in% c(var11, var12), 'One',
                                 ifelse(df.m$variable %in% c(var21, var22), 'Two', 'Three')))
g <- ggplot(df.m, aes(group=facet, x=Years, y=value, colour=variable, shape=variable))
g <- g + geom_point() + facet_wrap(~facet)

使用这段代码,我最终得到一个包含所有变量的图。没有刻面发生。我认为我做错了什么ifelse,但我不确定。

根据要求,这是输出head(df.m)

  Years variable     value facet
1  1997     var11 0.1245161     One
2  1998     var11 0.1154599     One
3  1999     var11 0.1151908     One
4  2000     var11 0.1209199     One
5  2001     var11 0.1321990     One
6  2002     var11 0.1476364     One
4

1 回答 1

3

因此,问题是因为您缺少要与之比较的向量中的引号%in%。但是您收到错误消息的原因比这要复杂一些。您的工作区中必须有名为var11,var12等的对象。

从干净的工作区开始:

require(reshape2)
dat = data.frame(ID = rnorm(10), var11 = rnorm(10), 
               var12 = rnorm(10), var21 = rnorm(10), var22 = rnorm(10), 
               var13 = rnorm(10), var23 = rnorm(10)) 
df.m = melt(dat, id.vars = 1)

如果这样做,我会在运行转换时收到错误消息:

dfm2 = transform(df.m, facet=ifelse(variable %in% c(var11, var12), 'One',
                                 ifelse(variable %in% c(var21, var22), 'Two', 'Three')))
Error in match(x, table, nomatch = 0L) : object 'var11' not found

现在我在我的工作区中创建了一些具有相同名称的矢量对象:

var11 = 1
var12 = 2
var21 = 1
var22 = 2
var13 = 1

dfm2 = transform(df.m, facet=ifelse(variable %in% c(var11, var12), 'One',
                                 ifelse(variable %in% c(var21, var22), 'Two', 'Three')))

Wah-lah,没有错误消息,变量为一级facet而不是三级。本质上,您从未有任何匹配项,因此最后一个级别 ( Three) 分配给所有内容。

您需要这些引号来引用字符向量而不是对象。

transform(df.m, facet=ifelse(variable %in% c("var11", "var12"), 'One',
                                 ifelse(variable %in% c("var21", "var22"), 'Two', 'Three')))
于 2013-10-11T18:35:24.263 回答