Câu hỏi hiệu suất cơ bản khá từ một người mới sử dụng R. Tôi muốn gán một ID nhóm cho mỗi hàng trong một khung dữ liệu bởi các kết hợp trường duy nhất. Dưới đây là cách tiếp cận hiện tại của tôi:Chỉ định ID nhóm với ddply
> # An example data frame
> df <- data.frame(name=c("Anne", "Bob", "Chris", "Dan", "Erin"),
st.num=c("101", "102", "105", "102", "150"),
st.name=c("Main", "Elm", "Park", "Elm", "Main"))
> df
name st.num st.name
1 Anne 101 Main
2 Bob 102 Elm
3 Chris 105 Park
4 Dan 102 Elm
5 Erin 150 Main
>
> # A function to generate a random string
> getString <- function(size=10) return(paste(sample(c(0:9, LETTERS, letters), size, replace=TRUE), collapse=''))
>
> # Assign a random string for each unique street number + street name combination
> df <- ddply(df,
c("st.num", "st.name"),
function(x) transform(x, household=getString()))
> df
name st.num st.name household
1 Anne 101 Main 1EZWm4BQel
2 Bob 102 Elm xNaeuo50NS
3 Dan 102 Elm xNaeuo50NS
4 Chris 105 Park Ju1NZfWlva
5 Erin 150 Main G2gKAMZ1cU
Trong khi điều này hoạt động tốt cho khung dữ liệu với tương đối ít hàng hoặc một số ít nhóm, tôi chạy vào vấn đề hiệu suất với các tập dữ liệu lớn hơn (> 100.000 hàng) có nhiều nhóm độc đáo.
Bất kỳ đề xuất nào để cải thiện tốc độ của tác vụ này? Có thể với idata.frame thử nghiệm của plyr()? Hoặc tôi đang đi về điều này tất cả các sai?
Cảm ơn trước sự giúp đỡ của bạn.
Dường như tôi cần quay lại và đọc tài liệu hướng dẫn cẩn thận hơn - đây chính là điều tôi đang tìm kiếm. Tôi đã đánh giá giải pháp này và dữ liệu của JoFrhwld trên tập dữ liệu thử nghiệm của tôi: một khung dữ liệu với 164.961 quan sát và 91.876 nhóm duy nhất dựa trên 3 biến nhóm. Tôi đã sử dụng từng phương pháp này để gán biến nhóm ID 100 lần. Thời gian trôi qua trung bình của id() là .958 (sd .0310). Thời gian đã trôi qua trung bình để dán các trường nhóm là 1,94 (sd .0946). Nhờ cả hai! – danpelota