0

コードは、stackoverflow のこの例に基づいています。ここに示すように、私の最初の試みはうまくいきます: ここに画像の説明を入力

次に、3 つのグループで同じことを試しました。私はこのようにグループ化しています:

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%。しかし、エラー メッセージが表示された理由は、それよりも少し複雑です。var11var12などの名前のワークスペースにオブジェクトが必要です。

クリーンなワークスペースから始めます。

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')))

エラー メッセージが表示されず、facet変数のレベルが 3 つではなく 1 つになりました。基本的に、あなたにはマッチがなかったので、最後のレベル ( 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 に答える