Mục tiêu là tạo các chỉ báo cho biến số/chuỗi trong một khung dữ liệu. Đó là dataframe có> 2mm hàng, và chạy R trên windows, tôi không có tùy chọn sử dụng plyr với. Equivalent = T. Vì vậy, tôi đang dùng con đường "chia và chinh phục" với plyr và reshape2.Tạo chỉ số trong các khung dữ liệu lớn
Chạy tan chảy và dàn diễn viên chạy ra khỏi bộ nhớ, và sử dụng
ddply(idata.frame(items) , c("ID") , function(x){
( colSums(model.matrix(~ x$element - 1)) > 0 )
} , .progress="text")
hoặc
ddply(idata.frame(items) , c("ID") , function(x){
( elements %in% x$element )
} , .progress="text")
không mất một lúc. Cách tiếp cận nhanh nhất là lời gọi để nhấn mạnh bên dưới. Bạn có thấy một cách để tăng tốc độ này? Câu lệnh% in% chạy nhanh hơn lệnh gọi model.matrix. Cảm ơn.
set.seed(123)
dd <- data.frame(
id = sample(1:5, size=10 , replace=T) ,
prd = letters[sample(1:5, size=10 , replace=T)]
)
prds <- unique(dd$prd)
tapply(dd$prd , dd$id , function(x) prds %in% x)
Tôi bị nhầm lẫn với ví dụ của bạn. Bạn đang tách 'dd $ prd' bằng' dd $ id', sau đó hỏi giá trị của 'prds' được biểu diễn trong mỗi id - nhưng' prds' không được sắp xếp (!) Bạn có muốn 'prds <- sort (duy nhất (dd $ prd)) '(điều đó có ý nghĩa hơn với tôi ...)? –
Miễn là các chỉ báo (lôgíc) tương ứng với các phần tử có sẵn trong prds có cùng thứ tự trên các ID, không quan trọng cách chúng được sắp xếp. –
OK. Xem câu hỏi khác của tôi, trong câu trả lời của tôi dưới đây ... –