データの長さ:
各観測は3つのグループのいずれかに属します。それらを "a"、 "b"、 "c"と呼んでみましょう。はinconsistでベクトルのリストからby_groupテーブルを作成することは
各観測値は、ids(整数)のベクトルで構成されています。 IDの多くは重複していますが、多くは重複しません。そこ100万個のユニークな値より簡単だが、私は元のデータに似ているために発生した10個のまたは20
ランダムデータの周り分FREQ設定すると、それはすぐに、より管理しやすい#次のようになります。
set.seed(21) #GoSpursGo random_id <- function(n) sample(1111:11111, n, replace = TRUE) ids <- replicate(1000, random_id(sample(200:700, 400))) group <- sample(c("a", "b", "c"), 1000, replace = TRUE) df <- dplyr::data_frame(group = group, ids = ids) df ## Source: local data frame [1,000 x 2] ## ## group ids ## <chr> <list> ## 1 b <int [593]> ## 2 a <int [444]> ## 3 b <int [605]> ## 4 b <int [263]> ## 5 a <int [274]> ## 6 c <int [450]> ## 7 c <int [656]> ## 8 b <int [687]> ## 9 a <int [302]> ## 10 a <int [234]> ## .. ... ...
を目的:
- (たとえば、すべてのグループにまたがって)上位1000個のIDの頻度を記述するテーブルを作成します。
問題:
- 私はベース
lapply
とtable
機能を使用してテーブルを生成することができますが、彼らは遅いです、と私は何かを明らかに欠けているようにそれは感じています。さらに、私はデータの波が十分にあるので、効率をあまり上げなくても自分の人生がはるかに容易になります。私はちょうどdplyr
[ベースRの機能の代わりに]を使用して開始され、効率の向上は優れています...しかし、私は空の[テーブル]を描いています。
質問:
- 誰でも効率的なデータ構造のこの種由来周波数テーブルを作成する方法についての提案がありますか?私は実際に
dplyr
に入っているので、その方向へのフィードバックはクールですが、そうであれば他のRパッケージを調べることを嬉しく思っています。
ベースRのバージョン:
## base R
base_tbl <- sapply(unique(df$group), function(x)
table(unlist(df$ids[df$group == x])))
base_tb <- data.frame(
ids = row.names(base_tbl),
base_tbl,
row.names = NULL,
stringsAsFactors = FALSE)
head(base_tb)
## ids b a c
## 1 1111 21 19 16
## 2 1112 17 19 17
## 3 1113 15 16 12
## 4 1114 12 16 17
## 5 1115 10 14 17
## 6 1116 8 23 17
あなたの予想される出力は – Bg1850
です。予想される結果がわかるように、ベースRでどのように表示するか(遅い場合でも) –
私はちょうど私のオフィスを出てすぐに投稿します。 – mkearney