การนับการสังเกตภายในช่วงวันที่ R
นี่อาจมีวิธีง่ายๆ ฉันมีชุดข้อมูลสองชุด หนึ่งคือเวกเตอร์ของการประทับเวลาทวีต 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)
.
คำตอบ
ดังนั้นหากฉันเข้าใจคุณถูกต้องคุณมีข้อมูลประเภทนั้น:
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"))
คุณสามารถกำหนดสิ่งนี้ให้กับเวกเตอร์อื่นได้อย่างง่ายดายซึ่งจะระบุว่าอยู่ในหรือไม่
คุณสามารถเขียนcountingfunction
ด้วยความช่วยเหลือของและคำนวณความแตกต่างในเวลาระหว่างคุณค่าของสองเวกเตอร์ทุกการใช้outer
difftime
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