私は大きなデータセットを処理しています。ここでは、データセットの例である:Rのデータフレームで値の出現をカウントするためのループのネストされた
id = rep(replicate(4, paste(sample(LETTERS, 3, replace=F), collapse="")), 12500)
names = rep(replicate(3125, paste(sample(letters, 5, replace=T), collapse="")), 16)
times = sample(c(3,6,24), 50000, replace = T)
df = data.frame(id=id, names=names, times=times)
count <- list()
ids <- as.vector(unique(df$id))
nms <- as.vector(unique(df$names))
for(i in 1:length(ids)){
vec <- c()
for(j in 1:length(nms)){
vec[j] <- nrow(df[df$id == ids[i] & df$names == nms[j], ])
}
count[[i]] <- vec
}
私の実際のデータを約50000 x 10
寸法を有するとidとnameフィールドがランダムに分散されています。誰もこれを処理するより良い方法を提案することはできますか?私のアプローチはうまくいくものの、遅すぎるからです。 dplyr
またはplyr
の方法はありますか?
おかげで、
EDIT:私のデータフレームの
ショートバージョン:
id = rep(replicate(3, paste(sample(LETTERS, 3, replace=F), collapse="")), 5)
names = rep(replicate(3, paste(sample(letters, 5, replace=T), collapse="")), 5)
times = sample(c(3,6,24), 15, replace = T)
df = data.frame(id=id, names=names, times=times)
df
id names times
1 DEW xxsre 24
2 QHY xkbhr 24
3 DQE tuyfk 6
4 DEW xxsre 24
5 QHY xkbhr 24
6 DQE tuyfk 3
7 DEW xxsre 3
8 QHY xkbhr 24
9 DQE tuyfk 3
10 DEW xxsre 24
11 QHY xkbhr 24
12 DQE tuyfk 3
13 DEW xxsre 24
14 QHY xkbhr 3
15 DQE tuyfk 3
出力:
> count
[[1]]
[1] 5 0 0
[[2]]
[1] 0 5 0
[[3]]
[1] 0 0 5
各リスト項目は、IDのためである、とリストvecは名前の数です。換言すればas.vector(unique(df$id))
およびas.vector(unique(df$names))
である。
Iドン'id'、' names'、 'times'カラムがどのように等しくなるかを見ています。 _original_データフレームはどこで定義しますか? –
OPが作成したいと思っていたカラムが 'times 'だと思って、期待通りの出力としてサンプルに含めました。(?)...分かりません... – Sotos
小さいサイズで走ろうとしました'df'(500行)ですが、結果のカウントはちょうど4のリストであり、それぞれ125個のものから成っています。 – zyurnaidi