Đếm số lần quan sát trong phạm vi ngày R

Aug 16 2020

Đ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ó countingfunctioncho 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 tweetshoặ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

YannikSuhre Aug 16 2020 at 21:12

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.

RonakShah Aug 20 2020 at 15:23

Bạn có thể viết countingfunctionvới sự trợ giúp của outervà 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 POSIXctnhư 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