1

私はこのようなデータフレームxを持っています

Id   Group   Var1
001    A     yes
002    A     no
003    A     yes
004    B     no
005    B     yes
006    C     no

このようなデータフレームを作りたい

Group    yes    no
A        2      1
B        1      1
C        0      1

関数.aggregateはうまく機能します

aggregate(x$Var1 ~ x$Group,FUN=summary)

しかし、結果を使用してデータフレームを作成することはできません。

.ddplyを使用してみた場合

ddply(x,"Group",function(x) summary(x$Var1))

エラーが発生しました:結果の長さが等しくありません。

私は何が間違っているのですか?

ありがとう。

4

2 に答える 2

4

これは、についての質問には答えませんddplyが、出力に役立つはずaggregateです。使用したaggregateコマンドの2番目の列は行列ですが、do.call(data.frame...代わりにデータフレームを取得するために出力全体をステートメントでラップできます。data.frameあなたが「mydf」と呼ばれていると仮定します。

temp <- do.call(data.frame, aggregate(Var1 ~ Group, mydf, summary))
temp
#   Group Var1.no Var1.yes
# 1     A       1        2
# 2     B       1        1
# 3     C       1        0
str(temp)
# 'data.frame':  3 obs. of  3 variables:
#  $ Group   : Factor w/ 3 levels "A","B","C": 1 2 3
#  $ Var1.no : int  1 1 1
#  $ Var1.yes: int  2 1 0

または、次を参照してtableください。

table(mydf$Group, mydf$Var1)
#    
#     no yes
#   A  1   2
#   B  1   1
#   C  1   0
as.data.frame.matrix(table(mydf$Group, mydf$Var1))
#   no yes
# A  1   2
# B  1   1
# C  1   0
于 2013-02-17T15:53:51.807 に答える
3

私はあなたのデータにNAを導入します

dat <- read.table(text = 'Id   Group   Var1
001    A     yes
002    A     no
003    A     NA     ## here!
004    B     no
005    B     yes
006    C     no',head = T)

aggregateサマリーではNAの列が作成され、数式メソッドにはna.action = na.omit余分なNA'列が除外されるデフォルト設定があるため、サマリーの前にNAを削除する必要があり ます。ここで回避策として、要約の前にNAを削除します。

 library(plyr)
  ddply(dat,"Group",function(x) {
    x <- na.omit(x$Var1)
    y <- summary(x)
})
 Group no yes
1     A  1   1
2     B  1   1
3     C  1   0

これはと同等です

x <- dat
aggregate(x$Var1 ~ x$Group,FUN=summary)
  x$Group x$Var1.no x$Var1.yes
1       A         1          1
2       B         1          1
3       C         1          0
于 2013-02-17T15:42:17.707 に答える