Đếm số lần quan sát trong phạm vi ngày R
Điều này có lẽ có một giải pháp thực sự đơn giản. Tôi có hai tập dữ liệu. Một là vectơ dấu thời gian của dòng tweet POSIXct và vectơ thứ hai là vectơ của dấu thời gian Bản đồ POSIXct ADL HEAT.
Tôi đang tìm cách xây dựng một hàm cho phép tôi lấy ngày tháng từ vectơ tweet và tính số lượng dấu thời gian trong vectơ ADL HEAT Map nằm trong một phạm vi được chỉ định từ tweet.
Mục đích của tôi là xây dựng hàm sao cho tôi có thể đưa vào vectơ tweet, vectơ ADL, số ngày từ vectơ tweet để bắt đầu đếm và số ngày từ vectơ tweet ngừng đếm và trả về một vectơ đếm cùng độ dài với dữ liệu tweet.
Tôi đã thử giải pháp ở đây và nó không hoạt động: Đếm số lần xuất hiện trong phạm vi ngày bằng R
Đây là một ví dụ về những gì tôi đang cố gắng làm. Đây là phiên bản nhỏ hơn của tập dữ liệu tôi đang sử dụng:
tweets <- c("2016-12-12 14:34:00 GMT", "2016-12-5 17:20:06 GMT")
ADLData <- c("2016-12-11 16:30:00 GMT", "2016-12-7 18:00:00 GMT", "2016-12-2 09:10:00 GMT")
Tôi muốn tạo một hàm, hãy gọi nó countingfunction
cho phép tôi nhập tập dữ liệu đầu tiên, tập dữ liệu thứ hai và gọi một số ngày để xem lại. Trong ví dụ này, tôi đã chọn 7 ngày:
countingfunction(tweets, ADLData, 7)
Lý tưởng nhất là điều này sẽ trả về một vectơ có độ dài bằng tweets
hoặc trong trường hợp này là 2 với các số đếm cho mỗi trong số bao nhiêu sự kiện ADLData
đã xảy ra trong vòng 7 ngày qua kể từ ngày vào tweets
. Trong trường hợp này c(2,1)
,.
Trả lời
Vì vậy, nếu tôi hiểu bạn một cách chính xác, bạn có loại dữ liệu đó:
tweets <- c(as.POSIXct("2020-08-16", tz = ""), as.POSIXct("2020-08-15", tz = ""), as.POSIXct("2020-08-14", tz = ""), as.POSIXct("2020-08-13", tz = ""))
ADL <- c(as.POSIXct("2020-08-15", tz = ""), as.POSIXct("2020-08-14", tz = ""))
Và những gì bạn muốn làm là cho biết liệu một tweet có nằm trong phạm vi ngày ADL hay không. Điều đó có thể được thực hiện khi làm điều này:
ifelse(tweets %in% ADL, print("its in"), print("its not"))
Bạn có thể dễ dàng gán cái này cho một vectơ khác, sau đó nó cho biết nó có ở trong hay không.
Bạn có thể viết countingfunction
với sự trợ giúp của outer
và tính toán sự khác biệt về thời gian giữa mọi giá trị của hai vectơ bằng cách sử dụng difftime
.
countingfunction <- function(x1, x2, n) {
mat <- outer(x1, x2, difftime, units = 'days')
rowSums(mat > 0 & mat <= n)
}
Giả sử bạn có các vectơ của lớp POSIXct
như sau:
tweets <- as.POSIXct(c("2016-12-12 14:34:00", "2016-12-5 17:20:06"), tz = 'GMT')
ADLData <- as.POSIXct(c("2016-12-11 16:30:00","2016-12-7 18:00:00",
"2016-12-2 09:10:00"), tz = 'GMT')
n <- 7
Bạn có thể chuyển chúng dưới dạng:
countingfunction(tweets, ADLData, n)
#[1] 2 1