1

データセット パッケージの ToothGrowth データに似たデータを要約しようとしています。

必要な出力は次のようになります。

  supp   len  half   one   two
1   OJ 619.9 132.3 227.0 260.6
2   VC 508.9  79.8 167.7 261.4

これは、用量とサプリメントの種類によって分割された長さの合計です. 私の同僚は、R バージョン 2.15.1 と plyr_1.7.1 を使用して、次のコードを使用してこの出力を取得します。

library(datasets)           

x <- ToothGrowth

test <- ddply(x,c("supp"),summarize,
                     len = sum(len,na.rm=TRUE),
                     half = sum(len[dose==0.5],na.rm=TRUE),
                     one = sum(len[dose==1],na.rm=TRUE),
                     two = sum(len[dose==2],na.rm=TRUE))

ToothGrowth データには NA はありませんが、実際のデータセットにはあります。

次の出力 R バージョン 3.0.0 および plyr_1.8 を取得します。それが役立つ場合は、両方に完全な sessionInfo() を提供できます。

    supp    len half    one two
1   OJ    619.9 619.9   0   0
2   VC    508.9 508.9   0   0

これでエラーは出ないようです。私のデータでは、「用量」は 3 つしかありませんが、「サプリメントの種類」はたくさんあります。半分のカテゴリに値がない場合は、合計を 1 つまたは 2 つにします。

バージョン タイプ間で一貫した出力を生成する方法はありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

7

summariseいわば「デフォルトで変異」するように更新されました。したがって、最後の 3 つの変数で を参照するlen場合、実際にはlen作成したばかりの変数を参照していることになり、これは単一の値にすぎません。それを別の名前で呼んでください:

test <- ddply(x,c("supp"),summarize,
+                      len1 = sum(len,na.rm=TRUE),
+                      half = sum(len[dose==0.5],na.rm=TRUE),
+                      one = sum(len[dose==1],na.rm=TRUE),
+                      two = sum(len[dose==2],na.rm=TRUE))
> test
  supp  len1  half   one   two
1   OJ 619.9 132.3 227.0 260.6
2   VC 508.9  79.8 167.7 261.4

(もともとこれを の変更と間違えていましたddply。) 理由としては、便利そうで、変更を求められたからだと思います。発生した問題とその後のパッチへのリンクを次に示します

于 2013-04-26T15:10:06.033 に答える