2

次のようなデータフレームがあります。

pred1 pred2 pred3 exp
a     b     c     0
a     d     c     0
a     b     c     1

私がやりたいことは、最初に pred1-3 のすべての一意の組み合わせを取得し、それらを追加のテーブルに書き込み、各組み合わせの頻度の列を追加し、値 1 の割合を示す別の列を追加することです exp (各組み合わせで 0 または 1 のみ)。このようなもの:

pred1 pred2 pred3 freq exp_prop
a     b     c     2    0.5
a     d     c     1    0

最初の 3 つのステップは、plyr を使用すると非常に簡単であることがわかりました。

ddply(df, .(pred1, pred2, pred3), summarise, freq=length(exp))

またはそれより短い

count(df[,c(pred1, pred2, pred3)])

しかし、expの比率を取得する方法がわかりません。

4

2 に答える 2

1

これでほぼ完了です。コマンドに追加exp_prop = mean(exp)するだけです:ddply

ddply(df, .(pred1, pred2, pred3), summarise,
      freq = length(exp), exp_prop = mean(exp))

  pred1 pred2 pred3 freq exp_prop
1     a     b     c    2      0.5
2     a     d     c    1      0.0
于 2012-11-17T13:13:29.040 に答える
0
# read in your data
x <- 
read.table(text="pred1 pred2 pred3 exp
a     b     c     0
a     d     c     0
a     b     c     1" , h = T)

library(sqldf)
sqldf( "select pred1, pred2, pred3, count(*) as numtimes, avg( exp ) as prop from x group by pred1, pred2, pred3" )

###### alternative:

# write all the column names according to some pattern
cols <- paste0("pred" , 1:3 , collapse = "," )

# save your data frame to another object
y <-
    sqldf( 
        paste( 
            "select" , 
            cols  , 
            " , count(*) as numtimes, avg( exp ) as prop from x group by" , 
            cols 
        ) 
    )

# print to screen
y
于 2012-11-17T11:53:36.777 に答える