Tôi biết điều này có thể đạt được với các gói khác, nhưng tôi đang cố gắng làm điều đó trong data.table
(vì nó có vẻ là nhanh nhất để nhóm).Cách lấy độ dài của nhóm hiện tại trong nhóm data.table?
library(data.table)
dt = data.table(a=c(1,2,2,3))
dt[,length(a),by=a]
kết quả trong
a V1
1: 1 1
2: 2 1
3: 3 1
trong khi
df = data.frame(a=c(1,2,2,3))
ddply(df,.(a),summarise,V1=length(a))
sản xuất
a V1
1 1 1
2 2 2
3 3 1
mà là một kết quả hợp lý hơn. Chỉ cần tự hỏi tại sao data.table
không cho kết quả tương tự, và làm thế nào điều này có thể đạt được.
+1 @jamborta Cũng xem [FAQ 2.10] (http: //datatable.r-forge.r-project. org/datatable-faq.pdf) cho một số nền. Lý do cho nó là hiệu quả để tránh lặp lại cùng một giá trị nhóm thông qua một vector dài tiềm năng (thời gian và không gian). Trong các ops với các vectơ dài hơn, R sẽ tái chế chiều dài 1 vectơ, nếu và khi cần thiết. Vì vậy, '.N' là con đường để đi đến đây. –
Cảm ơn các bạn, điều này rất hữu ích. – jamborta