วิธีรวบรวมข้อมูลรายวันเป็นข้อมูลรายเดือนและรายปีใน r


บางครั้งคุณอาจต้องการรวมข้อมูลรายวันเป็นข้อมูลรายสัปดาห์ รายเดือน หรือรายปีใน R

บทช่วยสอนนี้จะอธิบายวิธีการทำอย่างง่ายดายโดยใช้แพ็คเกจ lubridate และ dplyr

ตัวอย่าง: รวมข้อมูลรายวันใน R

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ที่แสดงยอดขายรายวันของสินค้าในช่วง 100 วันติดต่อกัน:

 #make this example reproducible
set.seed(1)

#create data frame
df <- data.frame(date = as.Date (" 2020-12-01 ") + 0:99,
                 sales = runif (100, 20, 50))

#view first six rows
head(df)

        dirty date
1 2020-12-01 27.96526
2 2020-12-02 31.16372
3 2020-12-03 37.18560
4 2020-12-04 47.24623
5 2020-12-05 26.05046
6 2020-12-06 46.95169

ในการรวบรวมข้อมูลนี้ เราสามารถใช้ฟังก์ชัน floor_date() ของแพ็คเกจ lubridate ซึ่งใช้ไวยากรณ์ต่อไปนี้:

 floor_date (x, unit)

ทอง:

  • x: เวกเตอร์ของวัตถุวันที่
  • หน่วย: หน่วยของเวลาที่จะปัดเศษเป็น ตัวเลือกได้แก่ วินาที นาที ชั่วโมง วัน สัปดาห์ เดือน รายสองเดือน ไตรมาส ครึ่งปี และปี

ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้ฟังก์ชันนี้กับฟังก์ชัน group_by() และ summary() ในแพ็คเกจ dplyr เพื่อค้นหายอดขายเฉลี่ยตามสัปดาห์ เดือน และปี:

ยอดขายเฉลี่ยต่อสัปดาห์

 library (lubridate)
library (dplyr)

#round dates down to week
df$week <- floor_date (df$date, " week ")

#find average sales per week
df %>%
  group_by (week) %>%
  summarize (mean = mean (sales))

# A tibble: 15 x 2
   week means
        
 1 2020-11-29 33.9
 2 2020-12-06 35.3
 3 2020-12-13 39.0
 4 2020-12-20 34.4
 5 2020-12-27 33.6
 6 2021-01-03 35.9
 7 2021-01-10 37.8
 8 2021-01-17 36.8
 9 2021-01-24 32.8
10 2021-01-31 33.9
11 2021-02-07 34.1
12 2021-02-14 41.6
13 2021-02-21 31.8
14 2021-02-28 35.2
15 2021-03-07 37.1

ยอดขายเฉลี่ยต่อเดือน

 library (lubridate)
library (dplyr)

#round dates down to week
df$month <- floor_date (df$date, " month ")

#find average sales by month
df %>%
  group_by (month) %>%
  summarize (mean = mean (sales))

# A tibble: 4 x 2
  month mean
       
1 2020-12-01 35.3
2 2021-01-01 35.6
3 2021-02-01 35.2
4 2021-03-01 37.0

ยอดขายเฉลี่ยต่อปี

 library (lubridate)
library (dplyr)

#round dates down to week
df$year <- floor_date (df$date, " year ")

#find average sales by month
df %>%
  group_by (year) %>%
  summarize (mean = mean (sales))

# A tibble: 2 x 2
  year means
       
1 2020-01-01 35.3
2 2021-01-01 35.7

โปรดทราบว่าเราเลือกที่จะรวมตามค่าเฉลี่ย แต่เราสามารถใช้สถิติสรุปใดก็ได้ที่เราต้องการ เช่น ค่ามัธยฐาน โหมด สูงสุด ต่ำสุด เป็นต้น

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่นๆ ใน R:

วิธีคำนวณค่าเฉลี่ยต่อกลุ่มใน R
วิธีการคำนวณผลรวมสะสมใน R
วิธีการพล็อตอนุกรมเวลาใน R

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *