Tôi có một bảng dữ liệu lớn trong R:Pivot một lớn data.table
library(data.table)
set.seed(1234)
n <- 1e+07*2
DT <- data.table(
ID=sample(1:200000, n, replace=TRUE),
Month=sample(1:12, n, replace=TRUE),
Category=sample(1:1000, n, replace=TRUE),
Qty=runif(n)*500,
key=c('ID', 'Month')
)
dim(DT)
Tôi muốn trục data.table này, như vậy mà loại trở thành một cột. Thật không may, vì số lượng các loại không phải là hằng số trong các nhóm, tôi không thể sử dụng this answer.
Bất kỳ ý tưởng nào về cách tôi có thể thực hiện việc này?
/chỉnh sửa: Căn cứ vào ý kiến Joran và câu trả lời flodel, chúng tôi đang thực sự định hình lại như sau data.table
:
agg <- DT[, list(Qty = sum(Qty)), by = c("ID", "Month", "Category")]
Reshape Điều này có thể được thực hiện một số cách (Tôi đã nhận được một số câu trả lời tốt cho đến nay), nhưng những gì tôi thực sự tìm kiếm là một cái gì đó mà sẽ quy mô tốt để một data.table
với hàng triệu hàng và hàng trăm đến hàng ngàn loại.
Bạn có ý định lấp đầy nội dung của bảng bằng 'Số nguyên' không? Tổng hợp bất kỳ kết hợp trùng lặp nào? – joran
@joran: trong ví dụ của tôi có sự kết hợp trùng lặp, nhưng vì lợi ích của đối số, cho phép giả sử không có. Điều tôi muốn là một cột riêng biệt cho từng giá trị của trường Danh mục, với NA hoặc 0 cho các kết hợp bị thiếu. – Zach
@ joran Tôi nghĩ câu trả lời chính xác cho câu hỏi của bạn là có: Tôi muốn Danh mục trở thành cột, với Số lượng trong mỗi cột, NA hoặc 0 cho Danh mục bị thiếu và các bản sao phải được tổng hợp (nhưng công bằng để làm tổng hợp trước khi chúng tôi định hình lại). – Zach