3

郡、日付、ED訪問数の3つの列を持つマトリックスがあります。日付は、次のように郡ごとに繰り返されます(単なる例)。

  County A  1/1/2012  2
  County A  1/2/2012  0
  County A  1/3/2012  5
  ... etc.
  County B  1/1/2012  3
  County B  1/2/2012  4
  ... etc.

このマトリックスを折りたたんで、各日付のすべての郡からの訪問を合計したいと思います。したがって、次のようになります。

1/1/2012  5
1/2/2012  4
etc.

Rでこの関数を使用しようとしてい"table()"ますが、この方法で日付ごとの訪問で機能させることができないようです。私がそうするとき"table(dt$date, dt$Visits)"、それは私にこのような頻度の表を与えます:

             0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  2011-01-01 3 1 2 0 1 1 0 2 0 0  0  0  0  0  0  0
  2011-01-02 2 3 1 0 0 1 0 0 1 0  2  0  0  0  0  0
  2011-01-03 3 1 1 2 1 0 0 0 0 1  0  0  0  0  1  0

助言がありますか?使用するより良い関数、おそらくある種の「合計」はありますか?

ありがとう!

4

2 に答える 2

5

table()値の合計ではなく、レコード数です。使用したい場合tapplyは、テーブル出力を取得し、sum関数を適用できます。または、を使用aveして、データフレームと同じ長さの合計ベクトルを取得できます。多分:

  with( EDcounts, tapply(EDcounts[[3]], EDcounts[[2]], sum, na.rm=TRUE) )

xtabs数式のLHSに「訪問」列の名前を付けると、訪問数の合計を計算できる可能性があります。

于 2012-08-01T23:58:31.713 に答える
3

@DWinが述べているように、table()は合計ではなく、レコード数です。

plyrdata.tableを使用したアプローチの3つの例を示します。aggregate

all_data <- expand.grid(country = paste('Country', LETTERS[1:3]), 
  date = seq(as.Date('2012/01/01'), as.Date('2012/12/31'), by = 1) )

all_data[['ed_visits']] <- rpois(nrow(all_data), lambda = 5)



# using plyr

library(plyr)

by_date_plyr <- ddply(all_data, .(date), summarize, visits = sum(ed_visits))


# using data.table
library(data.table)
all_DT <- data.table(all_data)
by_date_dt <- all_DT[, list(visits = sum(ed_visits)), by = 'date' ]

# using aggregate
by_date_base <- aggregate(ed_visits ~ date, data = all_data, sum)
于 2012-08-02T00:11:38.047 に答える