1

関数を実行していddplyますが、エラーが発生し続けます。

data.frameの構造:

str(visits.by.user)
'data.frame':   80317 obs. of  5 variables:
 $ ClientID    : Factor w/ 147792 levels "50912733","50098716",..: 1 3 4 5 6 7 8 10 11 12 ...
 $ TotalVisits      : int  64 231 18 21 416 290 3 13 1 7 ...
 $ TotalDayVisits: int  8 141 0 4 240 155 0 0 0 0 ...
 $ TotalNightVisits: int  56 90 18 17 176 135 3 13 1 7 ...
 $ quintile         : Factor w/ 5 levels "0-20","20-40",..: 5 5 4 4 5 5 2 4 1 3 ...

補足: ランダムな数値データのサンプルデータを作成する方法を知っています-代表的なサンプルを作成するために、5つのレベルの因子をどのように適用しますか?

ddplyコード:

summary.users <- ddply(data = subset(visits.by.user, TotalVisits > 0), 
                          .(quintile, TotalDayVisits, TotalNightVisits), 
                          summarize,
                          NumClients = length(ClientID))

エラーメッセージ:

Error in if (empty(.data)) return(.data) : 
 missing value where TRUE/FALSE needed

ddplyグループ化しようとしている変数を因子にする必要があるのではないかと思ったのでas.factor、整数変数を試してみましたが、うまくいきませんでした。

誰かが私がどこで間違っているのか見ることができますか?

編集:の上部を追加dput

structure(list(ClientID = structure(c(1L, 2L, 3L, 4L, 5L, 6L), .Label = c("50912733", "60098716", "50087112", "94752212", "78217771", "12884545"), class = "factor"),TotalVisits = c(80L, 92L, 103L, 18L, 182L, 136L), TotalDayVisits = c(56L, 90L, 18L, 17L, 176L, 135L), TotalNightVisits = c(24L, 2L, 85L, 1L, 6L, 1L), quintile = structure(c(5L, 5L, 4L, 4L, 5L, 5L), .Label = c("0-20", "20-40", "40-60", "60-80", "80-100"), class = "factor")), .Names = c("ClientID", "TotalVisits", "TotalDayVisits", "TotalNightVisits", "quintile"), row.names = c(NA,6L), class = "data.frame")
4

2 に答える 2

6

最初の引数は。という名前の最初の引数を取りdata=ながら名前が付けられます。これを変更すると、コードは正常に実行されます。ddply.data

私のコメントに関しては、これは私が過去に遭遇したと思っていた問題でしたが、メカニックdroplevels内のようなものへの暗黙の呼び出しがあるようです。ddplyそれがどのように機能するかについて、より詳細な説明を聞きたいです!

dat <- data.frame(x=1:20, z=factor(rep(letters[1:4], each=5)))

ddply(dat, .(z), summarise, length(x))
  z ..1
1 a   5
2 b   5
3 c   5
4 d   5
ddply(subset(dat, z!='a'), .(z), summarise, length(x))
  z ..1
1 b   5
2 c   5
3 d   5

これはうまく動作します。しかし、因子レベルを見ると、私は驚きました。

ddply(subset(dat, z!='a'), .(z), summarise, paste(levels(z), collapse=' '))
  z     ..1
1 b a b c d
2 c a b c d
3 d a b c d
于 2012-08-01T22:46:46.687 に答える
0

これはうまくいきました:

summary.users <- ddply(subset(visits.by.user, TotalVisits > 0), 
                          .(quintile, TotalDayVisits, TotalNightVisits), 
                          summarize, NumClients = length(ClientID))

> summary.users
  quintile TotalDayVisits TotalNightVisits NumClients
1    60-80             17                1          1
2    60-80             18               85          1
3   80-100             56               24          1
4   80-100             90                2          1
5   80-100            135                1          1
6   80-100            176                6          1
于 2012-08-02T00:34:20.977 に答える