R for Data import
1 บทนำ
การทำงานกับข้อมูลที่จัดหามาจากแพคเกจ R เป็นวิธีที่ดีในการเรียนรู้เครื่องมือวิทยาศาสตร์ข้อมูล แต่ในบางช่วงเวลาคุณต้องการหยุดการเรียนรู้และเริ่มต้นทำงานกับข้อมูลของคุณเอง ในบทนี้คุณจะได้เรียนรู้วิธีการอ่านไฟล์รูปสี่เหลี่ยมผืนผ้าข้อความล้วนเป็น R ที่นี่เราจะขีดเฉพาะพื้นผิวของการนำเข้าข้อมูลเท่านั้น แต่หลักการต่างๆจะแปลเป็นรูปแบบอื่น ๆ เราจะเสร็จสิ้นด้วยคำแนะนำไม่กี่สำหรับแพ็กเกจที่เป็นประโยชน์สำหรับข้อมูลประเภทอื่น ๆ
ข้อกำหนดเบื้องต้น
ในบทนี้คุณจะได้เรียนรู้วิธีโหลดไฟล์แบบแบนใน R ด้วย readr ซึ่งเป็นส่วนหนึ่งของแกน tidyverselibrary(tidyverse)
เริ่มต้นใช้งาน
ส่วนใหญ่ฟังก์ชั่น readr เกี่ยวข้องกับการเปลี่ยนไฟล์แบบแบนลงในเฟรมข้อมูล:
อ่าน read_csv () อ่านไฟล์คั่นด้วยเครื่องหมายจุลภาค read_csv2 () อ่านไฟล์ที่คั่นด้วยเครื่องหมายอัฒภาค (โดยทั่วไปเมื่อใช้) read_tsv () อ่านไฟล์ที่คั่นด้วยและ read_delim () อ่านในไฟล์ที่มีตัวคั่น
Read_fwf () อ่านไฟล์ความกว้างคงที่ คุณสามารถระบุเขตข้อมูลได้ตามความกว้างด้วย fwf_widths () หรือตำแหน่งของไฟล์ด้วย fwf_positions () Read_table () อ่านรูปแบบทั่วไปของไฟล์ความกว้างคงที่โดยคั่นคอลัมน์ด้วยช่องว่างสีขาว
Read_log () อ่านไฟล์บันทึกสไตล์ Apache (แต่ยังตรวจสอบ webreadr ซึ่งอยู่ด้านบนของ read_log () และมีเครื่องมือที่เป็นประโยชน์อีกมากมาย)
ฟังก์ชั่นเหล่านี้มีไวยากรณ์ที่คล้ายคลึงกัน: เมื่อคุณใช้งานได้คุณสามารถใช้งานอื่นได้อย่างง่ายดาย สำหรับส่วนที่เหลือของบทนี้เราจะเน้นที่ read_csv () ไฟล์ csv ไม่เพียง แต่เป็นรูปแบบการจัดเก็บข้อมูลที่มีอยู่ทั่วไป แต่เมื่อคุณเข้าใจ read_csv () คุณสามารถใช้ความรู้ของคุณกับฟังก์ชันอื่น ๆ ทั้งหมดใน readr ได้อย่างง่ายดาย
อาร์กิวเมนต์แรกสำหรับ read_csv () คือสิ่งที่สำคัญที่สุด: เป็นเส้นทางในการอ่าน
heights <- read_csv("data/heights.csv")
#> Parsed with column specification:
#> cols(
#> earn = col_double(),
#> height = col_double(),
#> sex = col_character(),
#> ed = col_integer(),
#> age = col_integer(),
#> race = col_character()
#> )
เมื่อคุณเรียกใช้ read_csv () จะพิมพ์คอลัมน์ระบุที่ระบุชื่อและประเภทของแต่ละคอลัมน์ นี่เป็นส่วนสำคัญของ readr ซึ่งเราจะกลับมาในการแยกวิเคราะห์ไฟล์นอกจากนี้คุณยังสามารถจัดหาไฟล์ CSV แบบอินไลน์ได้ นี่เป็นประโยชน์สำหรับการทดลองกับ readr และเพื่อสร้างตัวอย่างที่สามารถทำซ้ำได้เพื่อแชร์กับคนอื่น ๆ :
read_csv("a,b,c
1,2,3
4,5,6")
#> # A tibble: 2 × 3
#> a b c
#> <int> <int> <int>
#> 1 1 2 3
#> 2 4 5 6
ในทั้งสองกรณี read_csv () ใช้บรรทัดแรกของข้อมูลสำหรับคอลัมน์ชื่อซึ่งเป็นแบบแผนที่พบมาก มีสองกรณีที่คุณอาจต้องการปรับพฤติกรรมนี้:1.1บางครั้งมีเมตาดาต้าไม่กี่บรรทัดที่ด้านบนของไฟล์ คุณสามารถใช้ skip = n เพื่อข้ามเส้น n แรก; หรือใช้ comment = "#" เพื่อลดจำนวนบรรทัดทั้งหมดที่เริ่มต้นด้วย
read_csv("The first line of metadata
The second line of metadata
x,y,z
1,2,3", skip = 2)
#> # A tibble: 1 × 3
#> x y z
#> <int> <int> <int>
#> 1 1 2 3
read_csv("# A comment I want to skip
x,y,z
1,2,3", comment = "#")
#> # A tibble: 1 × 3
#> x y z
#> <int> <int> <int>
#> 1 1 2 3
1.2ข้อมูลอาจไม่มีชื่อคอลัมน์ คุณสามารถใช้ col_names = FALSE เพื่อบอกให้ read_csv () ไม่ให้ถือว่าแถวแรกเป็นหัวเรื่องและเปลี่ยนชื่อป้ายกำกับเป็นลำดับจาก X1 เป็น Xn:read_csv("1,2,3\n4,5,6", col_names = FALSE)
#> # A tibble: 2 × 3
#> X1 X2 X3
#> <int> <int> <int>
#> 1 1 2 3
#> 2 4 5 6
("\ N" เป็นทางลัดที่สะดวกสำหรับการเพิ่มบรรทัดใหม่) คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับเรื่องนี้และสายอักขระหนีอื่น ๆ ในสตริงสตริง)หรือคุณสามารถส่ง col_names อักขระเวกเตอร์ซึ่งจะใช้เป็นชื่อคอลัมน์:
read_csv("1,2,3\n4,5,6", col_names = c("x", "y", "z"))
#> # A tibble: 2 × 3
#> x y z
#> <int> <int> <int>
#> 1 1 2 3
#> 2 4 5 6
ตัวเลือกอื่นที่ต้องใช้การปรับแต่งคือ: ค่านี้ระบุค่า (หรือค่า) ที่ใช้แทนค่าที่หายไปในไฟล์ของคุณ:read_csv("a,b,c\n1,2,.", na = ".")
#> # A tibble: 1 × 3
#> a b c
#> <int> <int> <chr>
#> 1 1 2 <NA>
นี่คือสิ่งที่คุณต้องรู้เพื่ออ่าน ~ 75% ของไฟล์ CSV ที่คุณจะพบในทางปฏิบัติ นอกจากนี้คุณยังสามารถปรับแต่งสิ่งที่คุณได้เรียนรู้ที่จะอ่านแท็บที่คั่นด้วย read_tsv () และไฟล์ที่มีการแก้ไขด้วย read_fwf () อ่านในไฟล์ที่ท้าทายมากขึ้นคุณจะต้องเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการอ่านวิเคราะห์แต่ละคอลัมน์โดยให้เป็น R เวกเตอร์2 การแยกเวกเตอร์
ก่อนที่เราจะเข้าไปอ่านรายละเอียดว่า readr อ่านไฟล์จากดิสก์ได้อย่างไรเราต้องใช้ทางอ้อมเล็กน้อยเพื่อพูดถึงฟังก์ชัน _ * () ที่แยกวิเคราะห์ ฟังก์ชันเหล่านี้ใช้อักขระเวกเตอร์และส่งเวิร์กที่มีความเชี่ยวชาญมากขึ้นเช่นตรรกะจำนวนเต็มหรือวันที่:str(parse_logical(c("TRUE", "FALSE", "NA")))
#> logi [1:3] TRUE FALSE NA
str(parse_integer(c("1", "2", "3")))
#> int [1:3] 1 2 3
str(parse_date(c("2010-01-01", "1979-10-14")))
#> Date[1:2], format: "2010-01-01" "1979-10-14"
ฟังก์ชั่นเหล่านี้มีประโยชน์ในด้านขวา แต่ยังเป็นส่วนสำคัญในการสร้าง readr เมื่อคุณได้เรียนรู้วิธีการทำงานของส่วนประมวลผลแต่ละส่วนแล้วในส่วนนี้เราจะวนกลับและดูว่าส่วนเหล่านี้พอดีกันเพื่อแยกวิเคราะห์ไฟล์ทั้งหมดในส่วนถัดไปเช่นเดียวกับฟังก์ชันทั้งหมดใน tidyverse ฟังก์ชัน _ () จะแยกกันอยู่: อาร์กิวเมนต์แรกคือเวกเตอร์อักขระเพื่อแยกวิเคราะห์และอาร์กิวเมนต์ na ระบุสตริงที่ควรได้รับการปฏิบัติเหมือนที่ขาดหายไป:
parse_integer(c("1", "231", ".", "456"), na = ".")
#> [1] 1 231 NA 456
หากการแยกวิเคราะห์ไม่สำเร็จคุณจะได้รับคำเตือน:x <- parse_integer(c("123", "345", "abc", "123.45"))
#> Warning: 2 parsing failures.
#> row col expected actual
#> 3 -- an integer abc
#> 4 -- no trailing characters .45
และความล้มเหลวจะหายไปในผลลัพธ์:x
#> [1] 123 345 NA NA
#> attr(,"problems")
#> # A tibble: 2 × 4
#> row col expected actual
#> <int> <int> <chr> <chr>
#> 1 3 NA an integer abc
#> 2 4 NA no trailing characters .45
หากมีความล้มเหลวในการแยกวิเคราะห์หลายอย่างคุณจะต้องใช้ปัญหา () เพื่อรับชุดข้อมูลที่สมบูรณ์ นี้ส่งกลับ tibble ซึ่งคุณสามารถจัดการกับ dplyr
problems(x)
#> # A tibble: 2 × 4
#> row col expected actual
#> <int> <int> <chr> <chr>
#> 1 3 NA an integer abc
#> 2 4 NA no trailing characters .45
การใช้ parsers ส่วนใหญ่เป็นเรื่องของความเข้าใจในสิ่งที่มีอยู่และวิธีจัดการกับอินพุตประเภทต่างๆ มีแปดตัวแยกวิเคราะห์ที่สำคัญเป็นพิเศษ:
1 parse_logical () และ parse_integer () แยกวิเคราะห์ตรรกะและจำนวนเต็มตามลำดับ ไม่มีอะไรที่อาจผิดพลาดกับเครื่องวิเคราะห์เหล่านี้ได้ดังนั้นฉันจะไม่อธิบายต่อไปที่นี่อีกต่อไป
2 parse_double () เป็น parser ตัวเลขที่เข้มงวดและ parse_number () เป็น parser ตัวเลขที่มีความยืดหยุ่น เหล่านี้ซับซ้อนกว่าที่คุณอาจคาดหวังเนื่องจากส่วนต่างๆของโลกเขียนตัวเลขในรูปแบบต่างๆ
3 parse_character () ดูเหมือนง่ายดังนั้นจึงไม่จำเป็น แต่ภาวะแทรกซ้อนหนึ่งทำให้มีความสำคัญมาก: การเข้ารหัสตัวอักษร
4 parse_factor () สร้างปัจจัยโครงสร้างข้อมูลที่ R ใช้ในการแทนตัวแปรที่มีค่าคงที่และเป็นที่รู้จัก
5 parse_datetime (), parse_date () และ parse_time () ช่วยให้คุณสามารถแยกวิเคราะห์ข้อมูลวันที่และเวลาได้ นี่เป็นเรื่องที่ซับซ้อนมากที่สุดเพราะมีวิธีการเขียนวันที่แตกต่างกันมากมาย
ส่วนต่อไปนี้อธิบายตัวแยกวิเคราะห์เหล่านี้โดยละเอียด
2.1 Numbers
ดูเหมือนว่าควรจะง่ายต่อการแยกหมายเลขออก แต่ปัญหาสามข้อทำให้ยุ่งยาก:
1 คนเขียนตัวเลขแตกต่างกันในส่วนต่างๆของโลก ตัวอย่างเช่นบางประเทศใช้ ในระหว่างจำนวนเต็มและเศษส่วนของจำนวนจริงในขณะที่คนอื่นใช้,.
2 ตัวเลขมักถูกล้อมรอบด้วยอักขระอื่น ๆ ที่ให้บริบทบางอย่างเช่น "1000 ดอลลาร์" หรือ "10%"
3 ตัวเลขมักประกอบด้วยอักขระ "การจัดกลุ่ม" เพื่อให้อ่านได้ง่ายขึ้นเช่น "1,000,000" และอักขระการจัดกลุ่มเหล่านี้แตกต่างกันออกไปทั่วโลก
เพื่อแก้ปัญหาแรก readr มีแนวคิดเรื่อง "locale" ซึ่งเป็นอ็อบเจ็กต์ที่ระบุตัวเลือกการแยกวิเคราะห์ซึ่งแตกต่างจากที่หนึ่งไปยังอีกที่หนึ่ง เมื่อแยกวิเคราะห์ตัวเลขตัวเลือกที่สำคัญที่สุดคืออักขระที่คุณใช้สำหรับเครื่องหมายทศนิยม คุณสามารถแทนที่ค่าดีฟอลต์ของ โดยการสร้างโลแคลใหม่และตั้งค่าอาร์กิวเมนต์ decimal_mark:
parse_double("1.23")
#> [1] 1.23
parse_double("1,23", locale = locale(decimal_mark = ","))
#> [1] 1.23
สถานที่ตั้งเริ่มต้นของ readr คือ US-centric เพราะโดยทั่วไป R คือ US-centric (เช่นเอกสารของ R จะเขียนเป็นภาษาอังกฤษแบบอเมริกัน) วิธีอื่นคือการพยายามคาดเดาค่าเริ่มต้นจากระบบปฏิบัติการของคุณ นี่เป็นเรื่องยากที่จะทำดีและสำคัญยิ่งกว่านี้คือทำให้รหัสของคุณเปราะบาง: แม้ว่าจะทำงานได้ดีกับคอมพิวเตอร์ของคุณ แต่ก็อาจล้มเหลวเมื่อคุณส่งอีเมลไปยังเพื่อนร่วมงานในประเทศอื่น
parse_number () ระบุปัญหาที่สอง: ละเว้นอักขระที่ไม่ใช่ตัวเลขก่อนและหลังตัวเลข นี่เป็นประโยชน์อย่างยิ่งสำหรับสกุลเงินและเปอร์เซ็นต์ แต่ยังใช้เพื่อแยกตัวเลขที่ฝังอยู่ในข้อความ
parse_number("$100")
#> [1] 100
parse_number("20%")
#> [1] 20
parse_number("It cost $123.45")
#> [1] 123
ปัญหาสุดท้ายคือการรวมกันของ parse_number () และตำแหน่งที่ตั้งเป็น parse_number () จะไม่สนใจ "การจัดกลุ่ม":
# ใช้ในอเมริกา
parse_number("$123,456,789")
#> [1] 1.23e+08
# ใช้ในหลายพื้นที่ของยุโรป
parse_number("123.456.789", locale = locale(grouping_mark = "."))
#> [1] 1.23e+08
# ใช้ในประเทศสวิสเซอร์แลนด์
parse_number("123'456'789", locale = locale(grouping_mark = "'"))
#> [1] 1.23e+08
2.2 Strings
ดูเหมือน parse_character () ควรจะง่ายจริงๆ - มันก็จะกลับเข้า แต่น่าเสียดายที่ชีวิตไม่ง่ายนักเนื่องจากมีหลายวิธีในการแสดงสตริงเดียวกัน เพื่อให้เข้าใจถึงสิ่งที่เกิดขึ้นเราจำเป็นต้องอ่านรายละเอียดของวิธีการที่คอมพิวเตอร์เป็นตัวแทนของสตริง ใน R เราจะได้รับการแทนค่าพื้นฐานของสตริงโดยใช้ charTORaw ():
charToRaw("Hadley")
#> [1] 48 61 64 6c 65 79
แต่ละเลขฐานสิบหกเป็นไบต์ของข้อมูล: 48 คือ H, 61 เป็น, และอื่น ๆ การทำแผนที่จากเลขฐานสิบหกถึงตัวอักษรเรียกว่าการเข้ารหัสและในกรณีนี้การเข้ารหัสจะเรียกว่า ASCII ASCII สามารถแสดงตัวอักษรภาษาอังกฤษได้ดีเนื่องจากเป็นรหัสมาตรฐานอเมริกันสำหรับการแลกเปลี่ยนข้อมูล
สิ่งที่ซับซ้อนมากขึ้นสำหรับภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ ในวันแรก ๆ ของการประมวลผลมีมาตรฐานการแข่งขันจำนวนมากสำหรับการเข้ารหัสอักขระที่ไม่ใช่ภาษาอังกฤษและสามารถตีความสตริงที่คุณต้องการทราบทั้งค่าและการเข้ารหัสได้อย่างถูกต้อง ตัวอย่างเช่นการเข้ารหัสทั่วไป 2 แบบคือ Latin1 (หรือที่รู้จักกันในชื่อ ISO-8859-1 ซึ่งใช้สำหรับภาษายุโรปตะวันตก) และ Latin2 (หรือที่รู้จักกันในชื่อ ISO-8859-2 ซึ่งใช้สำหรับภาษายุโรปตะวันออก) ใน Latin1 ไบต์ b1 คือ "±" แต่ใน Latin2 จะเป็น "±"! โชคดีที่ปัจจุบันมีมาตรฐานหนึ่งที่สนับสนุนเกือบทุกแห่ง: UTF-8 UTF-8 สามารถเข้ารหัสอักขระได้ทุกตัวที่มนุษย์ใช้ในปัจจุบันรวมทั้งสัญลักษณ์เสริมต่างๆ (เช่น emoji!)
readr ใช้ UTF-8 ทุกที่: จะถือว่าข้อมูลของคุณเข้ารหัสเป็น UTF-8 เมื่อคุณอ่านและใช้งานเมื่อเขียนเสมอ นี่เป็นค่าดีฟอลต์ที่ดี แต่จะล้มเหลวสำหรับข้อมูลที่ผลิตโดยระบบเก่าที่ไม่เข้าใจ UTF-8 ถ้าสิ่งนี้เกิดขึ้นกับคุณสตริงของคุณจะดูแปลกเมื่อคุณพิมพ์ บางครั้งเพียงหนึ่งหรือสองตัวอักษรอาจจะ messed up; เวลาอื่น ๆ คุณจะได้รับสมบูรณ์ gibberish ตัวอย่างเช่น:
x1 <- "El Ni\xf1o was particularly bad this year"
x2 <- "\x82\xb1\x82\xf1\x82\xc9\x82\xbf\x82\xcd"
x1
#> [1] "El Ni\xf1o was particularly bad this year"
x2
#> [1] "\x82\xb1\x82\xf1\x82ɂ\xbf\x82\xcd"
ในการแก้ไขปัญหาคุณต้องระบุการเข้ารหัสใน parse_character ():
parse_character(x1, locale = locale(encoding = "Latin1"))
#> [1] "El Niño was particularly bad this year"
parse_character(x2, locale = locale(encoding = "Shift-JIS"))
#> [1] "こんにちは"
คุณจะพบการเข้ารหัสที่ถูกต้องได้อย่างไร? หากคุณโชคดีจะมีบางแห่งอยู่ในเอกสารข้อมูล แต่น่าเสียดายที่ไม่ค่อยเกิดขึ้นดังนั้น readr จึงให้ guess_encoding () เพื่อช่วยคุณคิดออก ไม่เข้าใจผิดและทำงานได้ดีขึ้นเมื่อคุณมีข้อความจำนวนมาก (ไม่เหมือนที่นี่) แต่ก็เป็นสถานที่ที่สมเหตุสมผลในการเริ่มต้น คาดว่าจะลองเข้ารหัสที่แตกต่างกันเล็กน้อยก่อนที่คุณจะพบข้อความที่ถูกต้อง
guess_encoding(charToRaw(x1))
#> # A tibble: 2 × 2
#> encoding confidence
#> <chr> <dbl>
#> 1 ISO-8859-1 0.46
#> 2 ISO-8859-9 0.23
guess_encoding(charToRaw(x2))
#> # A tibble: 1 × 2
#> encoding confidence
#> <chr> <dbl>
#> 1 KOI8-R 0.42
อาร์กิวเมนต์แรกที่ guess_encoding () สามารถเป็นเส้นทางไปยังไฟล์หรือเช่นในกรณีนี้เป็นเวกเตอร์ดิบ (มีประโยชน์ถ้าสตริงอยู่ใน R)
การเข้ารหัสเป็นหัวข้อที่หลากหลายและซับซ้อนและฉันได้เกาพื้นผิวที่นี่เท่านั้น หากคุณต้องการเรียนรู้เพิ่มเติมฉันขอแนะนำให้อ่านคำอธิบายโดยละเอียดที่ http://kunststube.net/encoding/
2.3 Factors
R ใช้ปัจจัยเพื่อแทนตัวแปรประเภทที่มีชุดค่าที่เป็นไปได้ที่รู้จักกันดี ให้ parse_factor () เวกเตอร์ของระดับที่ทราบเพื่อสร้างคำเตือนเมื่อมีค่าที่ไม่คาดคิด:
fruit <- c("apple", "banana")
parse_factor(c("apple", "banana", "bananana"), levels = fruit)
#> คำเตือน: การแยกวิเคราะห์ข้อผิดพลาด 1 รายการ
# column แถวที่คาดว่าจะเป็นจริง
#> 3 - ค่าใน bananana ชุดระดับ
#> [1] กล้วยแอปเปิ้ล <NA>
# attr ("ปัญหา")
#> # tibble: 1 × 4
# column แถวที่คาดว่าจะเป็นจริง
#> <int> <int> <chr> <chr>
#> 1 3 NA ค่าในระดับชุด bananana
#> ระดับ: กล้วยแอปเปิ้ล
แต่ถ้าคุณมีปัญหาหลายรายการก็มักจะง่ายขึ้นที่จะออกเป็นตัวอักษรเวกเตอร์และจากนั้นใช้เครื่องมือที่คุณจะได้เรียนรู้เกี่ยวกับในสตริงและปัจจัยที่จะทำความสะอาดพวกเขาขึ้น
2.4 Dates,date-time,and time
คุณเลือกระหว่างสามตัวแยกวิเคราะห์ขึ้นอยู่กับว่าคุณต้องการให้วันที่ (จำนวนวันนับตั้งแต่ 1970-01-01), วันที่เวลา (จำนวนวินาทีนับตั้งแต่เที่ยงคืน 1970-01-01) หรือเวลา (จำนวน วินาทีตั้งแต่เที่ยงคืน) เมื่อเรียกว่าไม่มีข้อโต้แย้งเพิ่มเติม:
- parse_datetime () คาดว่าจะเป็นวันที่ของ ISO8601 ISO8601 เป็นมาตรฐานสากลที่ส่วนประกอบของวันที่จัดเรียงจากที่ใหญ่ที่สุดและเล็กที่สุด ได้แก่ ปี, เดือน, วัน, ชั่วโมง, นาที, วินาที
parse_datetime("2010-10-01T2010")
#> [1] "2010-10-01 20:10:00 UTC"
# ถ้าเวลาถูกละเว้นจะมีการตั้งค่าเวลาเที่ยงคืน
parse_datetime("20101010")
#> [1] "2010-10-10 UTC"
นี่คือมาตรฐานวันที่ / เวลาที่สำคัญที่สุดและถ้าคุณทำงานกับวันที่และเวลาบ่อยๆขอแนะนำให้อ่าน https://en.wikipedia.org/wiki/ISO_8601
- parse_date () คาดว่าปีสี่หลัก, a - หรือ /, เดือน, a - หรือ / แล้ววัน:
parse_date("2010-10-01")
#> [1] "2010-10-01"
- parse_time () คาดว่าชั่วโมง,:, นาที, ตัวเลือก: และวินาทีและตัวระบุ am / pm ที่ระบุ:
library(hms)
parse_time("01:10 am")
#> 01:10:00
parse_time("20:10:01")
#> 20:10:01
หากค่าดีฟอลต์เหล่านี้ใช้ไม่ได้กับข้อมูลของคุณคุณสามารถระบุรูปแบบวันที่เวลาของคุณเองซึ่งสร้างขึ้นจากชิ้นส่วนต่อไปนี้:
ปี
Y (4 หลัก)
% y (2 หลัก); 00-69 -> 2000-2069, 70-99 -> 1970-1999.
เดือน
% m (2 หลัก)
% b (ชื่อย่อเช่น "Jan")
% B (ชื่อเต็ม "มกราคม")
วัน
% d (2 หลัก)
% e (พื้นที่นำทางที่เลือกได้)
เวลา
% H 0-23 ชั่วโมง
% I 0-12 ต้องใช้กับ% p
% p ตัวบ่งชี้ AM / PM
% M นาที
% S วินาทีจำนวนเต็ม
วินาทีจริงของระบบปฏิบัติการ
% Z เขตเวลา (เป็นชื่อเช่นอเมริกา / ชิคาโก) ระวังการย่อ: ถ้าคุณเป็นอเมริกันโปรดทราบว่า "EST" เป็นเขตเวลาของประเทศแคนาดาที่ไม่มีเวลาออมทรัพย์ตามฤดูกาล ไม่ใช่เวลามาตรฐานตะวันออก! เราจะกลับมาที่โซนเวลานี้
% z (เป็นค่าชดเชยจาก UTC เช่น +0800)
ที่ไม่ใช่ตัวเลข
% ข้ามหนึ่งอักขระที่ไม่ใช่ตัวเลข
% * ข้ามจำนวนตัวเลขที่ไม่ใช่ตัวเลข
วิธีที่ดีที่สุดในการหารูปแบบที่ถูกต้องคือการสร้างตัวอย่างสองสามตัวในเวกเตอร์ตัวอักษรและทดสอบด้วยฟังก์ชันการแยกวิเคราะห์อย่างใดอย่างหนึ่ง ตัวอย่างเช่น:
parse_date("01/02/15", "%m/%d/%y")
#> [1] "2015-01-02"
parse_date("01/02/15", "%d/%m/%y")
#> [1] "2015-02-01"
parse_date("01/02/15", "%y/%m/%d")
#> [1] "2001-02-15"
ถ้าคุณใช้% b หรือ% B ที่มีชื่อเดือนที่ไม่ใช่ภาษาอังกฤษคุณจะต้องตั้งค่าอาร์กิวเมนต์ภาษา lang เป็น locale () ดูรายการภาษาในตัวใน date_names_langs () หรือถ้ายังไม่ได้รวมภาษาของคุณให้สร้างด้วย date_names ()
referable http://r4ds.had.co.nz/data-import.html
parse_date("1 janvier 2015", "%d %B %Y", locale = locale("fr"))
#> [1] "2015-01-01"
referable http://r4ds.had.co.nz/data-import.html
ความคิดเห็น
แสดงความคิดเห็น