0

生の行入力形式 UID=character、Win/Lose=Boolean でクリックストリーム ログファイルの要約を実行しています。作成する出力サマリーは、行 UID、sumWin、sumLose の形式です。必要なものの一部を取得するためにテーブルを使用しましたが、要約 df で使用するためにテーブルの結果から因子ラベルを抽出するための正しい構文を理解するのに苦労しています。以下の例は、小さなテスト ケースを構築し、行き詰まった場所を示しています。表の結果から因子ラベルを取得できません。(もちろん、全体を処理するためのもっと良い方法があると思います - それは明らかに非常に便利です!)

ここのエディターでの書式設定にまだ問題があります-明らかに、それは次に尋ねる必要がある質問です...!

foo <- data.frame(Uid=character(4), Win=logical(4), stringsAsFactors=FALSE)  
  foo$Uid <- c("UidA", "UidB", "UidA", "UidC")  
  foo$Win <- c(FALSE, TRUE, TRUE, FALSE)  
  #display foo  
  foo  
   Uid   Win  
1 UidA FALSE  
2 UidB  TRUE  
3 UidA  TRUE  
4 UidC FALSE  

  # my desired summary df is, for each UID: NWin (foo$Win=TRUE), NRunUp (foo$Win=FALSE)   
  # here I initialise a holder for it  
  fooNUniques <- length(unique(foo$Uid))  
  fooSummary <- data.frame(Uids=character(fooNUniques),NWins=numeric(fooNUniques),NRunUps=numeric(fooNUniques))   
  fooSummary

  Uids NWins NRunUps

1          0       0  
2          0       0  
3          0       0  
  #I can reference in to the result of applying table to get part of what I want  
  #First I get the table, this gets me a table by win/lose value  
  fooTable <- table(foo$Uid, foo$Win)  
  fooTable  

         FALSE TRUE  
  UidA     1    1  
  UidB     0    1  
  UidC     1    0  

  # I can get at the actual results via unname which gives me a matrix  
  fooTableAsMat <- unname(fooTable)  
  fooTableAsMat  
     [,1] [,2]  
[1,]    1    1  
[2,]    0    1  
[3,]    1    0  

  #but the UID vec is hidden in the table structure *somewhere* and   
  # I can't work out how to reference it out  

  #coercing the result to a dataFrame doesn't work

  as.data.frame(fooTable)  
    Var1  Var2 Freq  
  1 UidA FALSE    1  
  2 UidB FALSE    0  
  3 UidC FALSE    1  
  4 UidA  TRUE    1  
  5 UidB  TRUE    1  
  6 UidC  TRUE    0  

  #I have also tried 'aggregate' but have not made friends with it
4

1 に答える 1

1

これは役に立ちますか?

使用plyr:

> ddply(foo, .(Uid), summarise, NWin = sum(Win), NRunUp = sum(!Win))
#    Uid NWin NRunUp
# 1 UidA    1      1
# 2 UidB    1      0
# 3 UidC    0      1
于 2013-02-06T12:28:46.213 に答える