การนับการสังเกตภายในช่วงวันที่ R

Aug 16 2020

นี่อาจมีวิธีง่ายๆ ฉันมีชุดข้อมูลสองชุด หนึ่งคือเวกเตอร์ของการประทับเวลาทวีต POSIXct และตัวที่สองคือเวกเตอร์ของการประทับเวลา POSIXct ADL HEAT Map

ฉันต้องการสร้างฟังก์ชันที่ช่วยให้ฉันใช้วันที่จากเวกเตอร์ทวีตและสำหรับแต่ละรายการจะนับจำนวนการประทับเวลาในเวกเตอร์ ADL HEAT Map ที่อยู่ในช่วงที่ระบุจากทวีต

เป้าหมายของฉันคือสร้างฟังก์ชันที่ฉันสามารถใส่เวกเตอร์ทวีตเวกเตอร์ ADL จำนวนวันจากเวกเตอร์ทวีตเพื่อเริ่มนับและจำนวนวันจากเวกเตอร์ทวีตเพื่อหยุดการนับและส่งคืนเวกเตอร์ จำนวนนับที่มีความยาวเท่ากับข้อมูลทวีต

ฉันลองวิธีแก้ปัญหาที่นี่แล้ว แต่ไม่ได้ผล: นับจำนวนครั้งที่เกิดขึ้นในช่วงวันที่ใน R

นี่คือตัวอย่างของสิ่งที่ฉันพยายามทำ นี่คือชุดข้อมูลรุ่นเล็กที่ฉันใช้:

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")

ฉันต้องการสร้างฟังก์ชั่นเรียกมันcountingfunctionว่าให้ฉันป้อนข้อมูลชุดแรกชุดที่สองและเรียกจำนวนวันเพื่อย้อนกลับไปดู ในตัวอย่างนี้ฉันเลือก 7 วัน:

countingfunction(tweets, ADLData, 7)

นึกคิดนี้จะกลับเวกเตอร์ของความยาวของที่tweetsหรือในกรณีนี้มีจำนวน 2 สำหรับแต่ละวิธีการหลายเหตุการณ์ในADLDataที่เกิดขึ้นภายใน 7 tweetsวันที่ผ่านมาจากวันที่ใน ในกรณีนี้c(2,1).

คำตอบ

YannikSuhre Aug 16 2020 at 21:12

ดังนั้นหากฉันเข้าใจคุณถูกต้องคุณมีข้อมูลประเภทนั้น:

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 = ""))

และสิ่งที่คุณต้องการทำคือการบอกว่าทวีตอยู่ในช่วงวันที่ ADL หรือไม่ ที่สามารถทำได้โดยทำสิ่งนี้:

ifelse(tweets %in% ADL, print("its in"), print("its not"))

คุณสามารถกำหนดสิ่งนี้ให้กับเวกเตอร์อื่นได้อย่างง่ายดายซึ่งจะระบุว่าอยู่ในหรือไม่

RonakShah Aug 20 2020 at 15:23

คุณสามารถเขียนcountingfunctionด้วยความช่วยเหลือของและคำนวณความแตกต่างในเวลาระหว่างคุณค่าของสองเวกเตอร์ทุกการใช้outerdifftime

countingfunction <- function(x1, x2, n) {
  mat <- outer(x1, x2, difftime, units = 'days')  
  rowSums(mat > 0 & mat <= n)
}

สมมติว่าคุณมีเวกเตอร์ของคลาสPOSIXctดังนี้:

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

คุณสามารถส่งผ่านเป็น:

countingfunction(tweets, ADLData, n)
#[1] 2 1