Tôi không thể tìm thấy giải pháp cho truy vấn của mình trên Stack Overflow. This post is similar, nhưng tập dữ liệu của tôi hơi - và quan trọng - khác nhau (trong đó tôi có nhiều biện pháp 'thời gian' trong biến nhóm của tôi).Chức năng tính giá trị so sánh các khoảng thời gian tuần tự
Tôi có quan sát sinh vật tại các địa điểm khác nhau, theo thời gian. Các trang web được tổng hợp thêm vào các khu vực lớn hơn, vì vậy tôi muốn có một hàm tôi có thể gọi theo ddply để tóm tắt tập dữ liệu cho từng khoảng thời gian trong các khu vực địa lý. Tuy nhiên, tôi gặp khó khăn khi nhận được hàm tôi cần.
Câu hỏi
Làm thế nào để chu kỳ thông qua khoảng thời gian và so sánh với khoảng thời gian trước đó, tính toán giao điểm (tức là số 'trang web' xảy ra ở cả hai giai đoạn thời gian) và tổng các số xảy ra trong từng giai đoạn?
Toy bộ dữ liệu:
time = c(1,1,1,1,2,2,2,3,3,3,3,3)
site = c("A","B","C","D","A","B","C","A","B","C","D","E")
df <- as.data.frame(cbind(time,site))
df$time = as.numeric(df$time)
chức năng My
dist2 <- function(df){
for(i in unique(df$time))
{
intersection <- length(which(df[df$time==i,"site"] %in% df[df$time==i- 1,"site"]))
both <- length(unique(df[df$time==i,"site"])) + length(unique(df[df$time==i-1,"site"]))
}
return(as.data.frame(cbind(time,intersection,both)))
}
dist2(df)
Những gì tôi nhận được:
dist2(df) time intersection both 1 1 3 8 2 1 3 8 3 1 3 8 4 1 3 8 5 2 3 8 6 2 3 8 7 2 3 8 8 3 3 8 9 3 3 8 10 3 3 8 11 3 3 8 12 3 3 8
Những gì tôi mong đợi (! Hy vọng) để đạt được:
time intersection both
1 1 NA 4
2 2 3 7
3 3 3 8
Khi tôi có một chức năng làm việc, tôi muốn sử dụng nó với ddply trên bộ tập dữ liệu để tính toán các giá trị cho mỗi khu vực.
Rất cám ơn mọi lời khuyên, mẹo, lời khuyên!
Tôi đang chạy:
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Sử dụng tốt bảng, mã thực sự nhanh. Đã làm trên chuẩn trên giải pháp của tôi và nó đã hơi hơn 10 lần chậm hơn của bạn, chủ yếu là do 'rbind/make.unique' – Pafnucy