ปัจจัยใน R: ตัวแปรหมวดหมู่และตัวแปรต่อเนื่อง

⚡ สรุปอย่างชาญฉลาด

ในภาษา R นั้น Factor จะจัดเก็บข้อมูลเชิงหมวดหมู่เป็นเวกเตอร์ของรหัสจำนวนเต็มที่จับคู่กับชุดของระดับ ซึ่งเป็นวิธีที่ภาษานี้ใช้แยกกลุ่มหมวดหมู่ที่มีจำนวนจำกัดออกจากการวัดแบบต่อเนื่อง

  • 🏷️ โครงสร้าง: ตัวแปรประเภท Factor จะเก็บรหัสจำนวนเต็มและคุณลักษณะระดับไว้ ดังนั้นแต่ละหมวดหมู่จะได้รับการตรวจสอบความถูกต้องกับรายการที่กำหนดไว้ตายตัว
  • 🧩 การสร้าง: factor() แปลงเวกเตอร์อักขระ และ class() ยืนยันว่าผลลัพธ์เปลี่ยนจากอักขระเป็นแฟกเตอร์แล้ว
  • 🔘 ที่กำหนด: หากไม่มีการระบุอาร์กิวเมนต์ระดับ (levels) R จะจัดเรียงหมวดหมู่เอง ดังนั้นจึงไม่มีการจัดอันดับระหว่างสีหรือเพศโดยนัย
  • 📊 ลำดับ: การส่งค่า ordered = TRUE พร้อมกับเวกเตอร์ระดับที่ระบุอย่างชัดเจน จะกำหนดลำดับจากต่ำสุดไปสูงสุด
  • 🔢 ต่อเนื่อง: โดยค่าเริ่มต้น คอลัมน์ตัวเลขและจำนวนเต็มจะต่อเนื่องกัน ดังที่คลาส (mtcars$mpg) แสดงให้เห็น
  • ⚠️ กับดักการแปลง: as.numeric() บนตัวแปรประเภท factor จะส่งคืนรหัสระดับ ดังนั้นควรอ่านค่าป้ายกำกับผ่านฟังก์ชัน levels() ก่อน
  • 🧠 ซ่อมบำรุง: relevel() กำหนดค่าพื้นฐานของโมเดล และ droplevels() ล้างหมวดหมู่ที่เหลือจากชุดย่อย

พิจารณาปัจจัย R ทั้งตัวแปรเชิงหมวดหมู่และตัวแปรต่อเนื่อง

ปัจจัยใน R คืออะไร?

ปัจจัยในอาร์ แฟกเตอร์ (Factor) คือตัวแปรที่ใช้ในการจัดหมวดหมู่และจัดเก็บข้อมูล โดยมีค่าที่แตกต่างกันได้จำนวนจำกัด โดยจะจัดเก็บข้อมูลในรูปแบบเวกเตอร์ของค่าจำนวนเต็ม แฟกเตอร์ใน R ยังเป็นที่รู้จักในชื่อตัวแปรเชิงหมวดหมู่ (categorical variable) ที่เก็บทั้งค่าสตริงและค่าจำนวนเต็มเป็นระดับ โดยส่วนใหญ่แล้ว แฟกเตอร์จะใช้ในการสร้างแบบจำลองทางสถิติและการวิเคราะห์ข้อมูลเชิงสำรวจด้วย R

ภายในแล้ว แฟคเตอร์ประกอบด้วยวัตถุสองชิ้นที่เดินทางไปด้วยกัน ได้แก่ เวกเตอร์จำนวนเต็มของรหัส และคุณลักษณะที่เป็นอักขระชื่อ... ระดับแต่ละรหัสเป็นตำแหน่งในเวกเตอร์ระดับนั้น ซึ่งเป็นเหตุผลว่าทำไมการพิมพ์แฟกเตอร์จึงแสดงเป็นคำ ในขณะที่ คลาส() แสดงตัวเลข

ในชุดข้อมูล เราสามารถแยกแยะตัวแปรได้สองประเภท: เด็ดขาด และ ต่อเนื่องกัน.

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

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

ตัวแปรหมวดหมู่

ตัวแปรหมวดหมู่ใน R ค่าต่างๆ จะถูกเก็บไว้ในตัวแปรประเภทแฟกเตอร์ ลองตรวจสอบโค้ดด้านล่างเพื่อแปลงตัวแปรประเภทอักขระให้เป็นตัวแปรประเภทแฟกเตอร์ในภาษา R รูทีนการสร้างแบบจำลองและการเรียนรู้ของเครื่องจำนวนมากไม่สามารถประมวลผลข้อความดิบได้ ดังนั้นหมวดหมู่ต่างๆ จึงต้องถูกเข้ารหัสเป็นระดับหรือเป็นตัวเลขก่อนที่จะทำการสร้างแบบจำลอง

วากยสัมพันธ์

factor(x = character(), levels, labels = levels, ordered = is.ordered(x))

เอกสารอ้างอิงพื้นฐานของ R ระบุข้อโต้แย้งเพิ่มเติมอีกสองประการที่รูปแบบย่อข้างต้นละเว้นไป: ไม่รวมซึ่งจะลบค่าออกก่อนที่จะสร้างชุดระดับ และ เอ็นแม็กซ์ซึ่งเป็นขีดจำกัดสูงสุดของจำนวนระดับที่ช่วยเร่งความเร็วในการแปลงเวกเตอร์ขนาดใหญ่มาก

ข้อโต้แย้ง:

  • x: เวกเตอร์ของข้อมูลเชิงหมวดหมู่ใน R ต้องเป็นสตริงหรือจำนวนเต็ม ไม่ใช่เลขฐานสิบ
  • ระดับ: เวกเตอร์ของค่าที่เป็นไปได้ที่ x สามารถรับได้ อาร์กิวเมนต์นี้เป็นตัวเลือก ค่าเริ่มต้นคือรายการที่ไม่ซ้ำกันของค่าในเวกเตอร์ x ซึ่งเรียงลำดับจากน้อยไปมาก
  • ฉลาก: เพิ่มป้ายกำกับให้กับข้อมูลประเภท x ใน R ตัวอย่างเช่น 1 สามารถใช้เป็นป้ายกำกับเพศชาย และ 0 สามารถใช้เป็นป้ายกำกับเพศหญิง
  • ไม่รวม: เวกเตอร์ของค่าที่จะถูกตัดออกเมื่อสร้างเซตระดับ ค่าที่ถูกตัดออกจะกลายเป็น NA ในผลลัพธ์
  • สั่งซื้อ: ตัวบ่งชี้เชิงตรรกะที่ใช้กำหนดว่าระดับต่างๆ ควรเรียงลำดับตามลำดับที่กำหนดหรือไม่
  • เอ็นแม็กซ์: ขีดจำกัดบนของจำนวนระดับ (ซึ่งเป็นตัวเลือกเสริม มีประโยชน์สำหรับเวกเตอร์ที่มีความยาวมาก)

ตัวอย่าง:

มาแปลงเวกเตอร์อักขระให้เป็นแฟกเตอร์และตรวจสอบการเปลี่ยนแปลงด้วยฟังก์ชัน class() กัน

# Create gender vector
gender_vector <- c("Male", "Female", "Female", "Male", "Male")
class(gender_vector)
# Convert gender_vector to a factor
factor_gender_vector <-factor(gender_vector)
class(factor_gender_vector)

Output:

## [1] "character"
## [1] "factor"

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

ตัวแปรหมวดหมู่ใน R สามารถแบ่งออกเป็น ตัวแปรหมวดหมู่ที่ระบุ และ ตัวแปรเด็ดขาดลำดับ.

ตัวแปรหมวดหมู่ที่กำหนด

ตัวแปรเชิงหมวดหมู่แบบนาม (Nominal categorical variable) มีค่าได้หลายค่า แต่ลำดับไม่สำคัญ ตัวอย่างเช่น เพศชายหรือเพศหญิง ตัวแปรเชิงหมวดหมู่แบบนามใน R ไม่มีการกำหนดลำดับใดๆ

# Create a color vector
color_vector <- c('blue', 'red', 'green', 'white', 'black', 'yellow')
# Convert the vector to factor
factor_color <- factor(color_vector)
factor_color

Output:

## [1] blue   red    green  white  black  yellow
## Levels: black blue green red white yellow

จากค่า factor_color เราไม่สามารถบอกลำดับได้ รายการระดับเรียงตามตัวอักษรเท่านั้น เนื่องจากไม่ได้ระบุอาร์กิวเมนต์ระดับไว้ ดังนั้น R จึงเรียงลำดับค่าที่ไม่ซ้ำกันเอง การเรียงลำดับนั้นเป็นไปตามภาษาท้องถิ่นที่ใช้งานอยู่ ไม่ใช่ ASCII ทั่วไป ซึ่งเป็นเหตุผลหนึ่งที่ต้องระบุระดับอย่างชัดเจนทุกครั้งที่ลำดับมีความสำคัญ

ตัวแปรหมวดหมู่ลำดับ

ตัวแปรเชิงหมวดหมู่แบบเรียงลำดับมีลำดับตามธรรมชาติ การจัดอันดับมาจากการเรียงลำดับของเวกเตอร์ที่ส่งผ่านไปยังตัวแปรนั้น ระดับ การตั้งค่า ordered = TRUE จะบอกให้ R ถือว่าลำดับนั้นเป็นการจัดอันดับ แทนที่จะเป็นเพียงรายการธรรมดา การตั้งค่า ordered = FALSE จะไม่กลับลำดับ แต่จะสร้างแฟกเตอร์ที่ไม่เรียงลำดับธรรมดาขึ้นมา หากต้องการจัดอันดับจากสูงสุดไปต่ำสุด ให้กลับลำดับของเวกเตอร์ระดับนั้นเอง

ตัวอย่าง:

เราสามารถใช้การสรุปเพื่อนับค่าสำหรับตัวแปรแต่ละตัวใน R

# Create Ordinal categorical vector 
day_vector <- c('evening', 'morning', 'afternoon', 'midday', 'midnight', 'evening')
# Convert `day_vector` to a factor with ordered level
factor_day <- factor(day_vector, order = TRUE, levels =c('morning', 'midday', 'afternoon', 'evening', 'midnight'))
# Print the new variable
factor_day

Output:

## [1] evening   morning   afternoon midday    
midnight  evening

คอนโซลจะแสดงค่าต่างๆ ก่อน แล้วจึงแสดงอันดับไว้ด้านล่าง บล็อกถัดไปเริ่มต้นด้วยบรรทัด Levels ที่ยังคงถูกคอมเมนต์ไว้ เพื่อให้อันดับยังคงมองเห็นได้ในขณะที่การเรียกใช้ summary() ถูกเพิ่มเข้าไปในโค้ดก่อนหน้า

## Levels: morning < midday < afternoon < evening < midnight
# Append the line to above code
# Count the number of occurence of each level
summary(factor_day)

Output:

##   morning    midday afternoon   evening  midnight
##         1         1         1         2         1

R เรียงลำดับระดับจาก 'เช้า' ถึง 'เที่ยงคืน' ตามที่ระบุไว้ในอาร์กิวเมนต์ levels เนื่องจากปัจจัยมีการเรียงลำดับ ตัวดำเนินการเปรียบเทียบ เช่น < และ > จึงสามารถใช้งานได้ ซึ่งใช้ไม่ได้กับปัจจัยสีแบบระบุชื่อข้างต้น

ตัวแปรต่อเนื่อง

ตัวแปรคลาสแบบต่อเนื่องเป็นค่าเริ่มต้นใน R โดยจะถูกจัดเก็บเป็นตัวเลขหรือจำนวนเต็ม เราสามารถเห็นได้จากชุดข้อมูลด้านล่าง mtcars เป็นชุดข้อมูลในตัวที่รวบรวมข้อมูลเกี่ยวกับรถยนต์ประเภทต่างๆ เราสามารถนำเข้าได้โดยใช้ mtcars และตรวจสอบคลาสของตัวแปร mpg (ไมล์ต่อแกลลอน) ซึ่งจะส่งคืนค่าตัวเลข แสดงว่าตัวแปรนี้เป็นตัวแปรต่อเนื่อง

dataset <- mtcars
class(dataset$mpg)

เอาท์พุต

## [1] "numeric"

ไม่ใช่ทุกคอลัมน์ตัวเลขจะเป็นค่าต่อเนื่องอย่างแท้จริง ในชุดข้อมูลเดียวกัน คอลัมน์ cyl เก็บค่าได้เพียง 4, 6 และ 8 ในขณะที่คอลัมน์ am เก็บค่าได้เพียง 0 และ 1 ดังนั้นทั้งสองจึงเป็นหมวดหมู่ที่บังเอิญถูกจัดเก็บในรูปแบบตัวเลข การแปลงค่าด้วยฟังก์ชัน factor() ก่อนการสร้างแบบจำลองจะช่วยป้องกันไม่ให้ R ถือว่าช่องว่างระหว่าง 4 และ 6 กระบอกสูบเป็นปริมาณที่วัดได้ ส่วนการดำเนินการตรงกันข้าม คือการแบ่งคอลัมน์ต่อเนื่องออกเป็นช่วงๆ นั้น สามารถทำได้โดยใช้ฟังก์ชัน cut()

ระดับปัจจัยและป้ายกำกับใน R

คุณลักษณะระดับ (levels) เป็นส่วนหนึ่งของปัจจัยที่คุณจะใช้เวลาปรับแต่งมากที่สุด เพราะมันควบคุมทั้งสิ่งที่พิมพ์ออกมาและสิ่งที่โมเดลใช้เป็นค่าพื้นฐาน ตัวช่วยพื้นฐานสี่ตัวของ R ครอบคลุมเกือบทุกกรณี

ฟังก์ชัน สิ่งที่มันไม่ การใช้งานทั่วไป
ระดับ(f) อ่านหรือแทนที่ชื่อระดับ เปลี่ยนชื่อย่อให้เป็นป้ายกำกับที่อ่านง่าย
nระดับ(f) ส่งคืนจำนวนระดับ การตรวจสอบพบว่าหมวดหมู่ไม่ได้เกิดข้อผิดพลาดหลังจากการเชื่อมต่อ
relevel(f, ref) เลื่อนไปด้านหน้าหนึ่งระดับ การเลือกเส้นฐานสำหรับการถดถอย
ระดับดรอป(f) ลบระดับที่มีค่าสังเกตการณ์เป็นศูนย์ออก การทำความสะอาดหลังจากการเลือกกลุ่มย่อยหรือการกรอง

บล็อกด้านล่างนี้ใช้ทั้งสี่ปัจจัยกับสีและเพศที่สร้างขึ้นก่อนหน้านี้

# Inspect the levels of an existing factor
levels(factor_color)          # the level names, in the order R stored them
nlevels(factor_color)         # how many distinct levels exist

# Rename the levels in place (the new vector must follow the same order)
levels(factor_color) <- c('Black', 'Blue', 'Green', 'Red', 'White', 'Yellow')

# Attach labels at creation time instead of renaming afterwards
gender_coded <- factor(c(1, 0, 0, 1, 1), levels = c(0, 1), labels = c('female', 'male'))

# Make 'male' the reference level that modelling functions compare against
gender_coded <- relevel(gender_coded, ref = 'male')

# Remove levels that survived a subset but no longer occur in the data
subset_color <- droplevels(factor_color[1:3])

มีรายละเอียดสองอย่างที่ควรจดจำ การกำหนดค่าให้กับ levels() จะเปลี่ยนชื่อตามตำแหน่ง ดังนั้นเวกเตอร์ที่ไม่ตรงกันจะเปลี่ยนชื่อหมวดหมู่ผิดโดยไม่แจ้งให้ทราบ และชุดย่อยจะเก็บระดับเดิมทั้งหมดไว้จนกว่าจะมีการเรียกใช้ droplevels() ซึ่งเป็นเหตุผลว่าทำไมการกรองจึงจำเป็น กรอบข้อมูล ยังสามารถพล็อตแท่งว่างเปล่าได้ ฉลาก เหตุผลก็แตกต่างออกไปอีก: มันตั้งชื่อระดับต่างๆ ในขณะสร้าง และป้ายกำกับที่ซ้ำกันจะรวมค่าอินพุตหลายค่าเข้าเป็นระดับเดียว

วิธีการแปลงแฟกเตอร์เป็นตัวเลขหรืออักขระใน R

นี่คือข้อผิดพลาดที่พบบ่อยที่สุดเกี่ยวกับตัวแปรประเภท Factor ใน R เนื่องจาก Factor เก็บค่าเป็นรหัสจำนวนเต็ม การเรียกใช้เมธอด as.numeric() จะคืนค่าเป็นรหัสเหล่านั้นแทนที่จะเป็นค่าที่แสดงบนหน้าจอ ตัวอย่างเช่น Factor ของปี 2021 ถึง 2023 จะได้ค่ากลับมาเป็น 1, 2 และ 3

# A factor whose labels happen to look like numbers
year_factor <- factor(c('2021', '2023', '2022', '2023'))

# WRONG: this returns the internal codes 1, 3, 2, 3 - not the years
as.numeric(year_factor)

# RIGHT: read the label through the levels attribute first
as.numeric(levels(year_factor))[year_factor]

# Equivalent and easier to remember, but slightly slower
as.numeric(as.character(year_factor))

# Back to plain text
as.character(year_factor)

เอกสารพื้นฐานของ R แนะนำให้ใช้ as.numeric(levels(f))[f] เป็นวิธีที่ถูกต้องและเร็วกว่าเล็กน้อย โดยมี as.numeric(as.character(f)) เป็นวิธีที่อ่านง่ายกว่า ทั้งสองวิธีจะอ่านป้ายกำกับก่อนแล้วจึงแปลงในภายหลัง

  • ปัจจัยที่ส่งผลต่อลักษณะนิสัย: as.character(f) ส่งคืนป้ายกำกับเป็นข้อความธรรมดา
  • การแยกตัวประกอบเป็นรหัสจำนวนเต็ม: as.integer(f) หรือ unclass(f) เมื่อรหัสเป็นสิ่งที่คุณต้องการจริงๆ
  • ตัวละครต่อปัจจัย: factor(x) หรือทางลัดที่เร็วกว่าอย่าง as.factor(x)
  • แปลงตัวเลขเป็นตัวประกอบ: factor(x) สำหรับรหัสแบบไม่ต่อเนื่อง, cut(x, breaks) สำหรับค่าต่อเนื่องที่ต้องการการจัดกลุ่ม

มีมาตรการป้องกันอย่างหนึ่งที่ใช้ได้กับทุกกรณี หากค่าใน x ไม่ปรากฏในเวกเตอร์ระดับ ฟังก์ชัน factor() จะตั้งค่าองค์ประกอบนั้นเป็น NA แทนที่จะแสดงข้อผิดพลาด ดังนั้นช่องว่างที่ไม่พึงประสงค์หรือความแตกต่างของตัวพิมพ์ใหญ่และตัวพิมพ์เล็กอาจทำให้แถวถูกลบไปโดยไม่รู้ตัว การเปรียบเทียบค่าที่ไม่ซ้ำกันก่อนและหลังการแปลง หรือ การเรียงลำดับเฟรมข้อมูล การเพิ่มคอลัมน์ใหม่ทำให้เห็นปัญหาได้อย่างชัดเจน

ใน R ตัวแปรประเภท Factor, Character และ Numeric: ควรใช้แบบไหนในสถานการณ์ใด

การเลือกโหมดการจัดเก็บข้อมูลตั้งแต่เนิ่นๆ จะช่วยลดเวลาในการแก้ไขข้อผิดพลาดในภายหลังได้มาก ตารางนี้เปรียบเทียบโหมดทั้งสามที่คอลัมน์ของข้อความหรือโค้ดสามารถใช้ได้

อสังหาริมทรัพย์ ปัจจัย คาแรคเตอร์ เป็นตัวเลข
จัดเก็บเป็น รหัสจำนวนเต็มบวกคุณลักษณะระดับ Strings Doubles หรือจำนวนเต็ม
ชุดค่าคงที่ ใช่ กำหนดโดยระดับ ไม่ ไม่
การสั่งซื้อจอแสดงผลแบบกำหนดเอง ใช่ ผ่านหลายระดับ เรียงตามตัวอักษรเท่านั้น เฉพาะตัวเลข
คณิตศาสตร์ ไม่ได้รับอนุญาต ไม่ได้รับอนุญาต ได้รับอนุญาต
ความแตกต่างของแบบจำลอง สร้างโดยอัตโนมัติ ถูกบังคับก่อน ถือเป็นการวัดผล

ใช้ ปัจจัย เมื่อค่าต่างๆ มาจากรายการที่ทราบและปิดสนิท เมื่อลำดับการแสดงผลหรือการจัดอันดับมีความสำคัญ หรือเมื่อคอลัมน์นั้นป้อนข้อมูลให้กับแบบจำลองหรือคำอธิบายแผนภูมิ ให้ใช้ ตัวอักษร สำหรับข้อความอิสระ ตัวระบุ และสิ่งใดก็ตามที่คุณจะนำมาแยกวิเคราะห์หรือเชื่อมต่อ เช่น ชื่อ บันทึก และรหัสที่ปรากฏขึ้นเรื่อยๆ พร้อมค่าใหม่ๆ ให้ใช้ เป็นตัวเลข เฉพาะเมื่อระยะห่างระหว่างค่าสองค่านั้นมีความหมายเท่านั้น

ตารางด้านล่างแสดงวิธีตรวจสอบสิ่งที่คุณมีอยู่ได้อย่างรวดเร็วที่สุด

# Ask R what each column of a data frame actually is
sapply(mtcars, class)

# Direct membership tests
is.factor(factor_day)
is.ordered(factor_day)

# unclass() exposes the integer codes hiding behind the labels
unclass(factor_color)

มีสองวิธีที่จะทำให้การเลือกเป็นไปอย่างเที่ยงตรง คือ รัน sapply(df, class) หลังจากการนำเข้าทุกครั้ง เพราะอักขระผิดที่เพียงตัวเดียวในคอลัมน์ตัวเลขจะทำให้ทั้งคอลัมน์กลายเป็นข้อความ และแปลงเป็นแฟกเตอร์ให้ช้าที่สุดเท่าที่จะเป็นไปได้ หลังจากที่ทำความสะอาดและรวมข้อมูลแล้ว เพื่อให้ ดีพลีร์ การเชื่อมต่อและการกรองยังคงเปรียบเทียบสตริงธรรมดา ไม่ใช่ชุดระดับที่ไม่ตรงกัน

คำถามที่พบบ่อย

เมื่อไม่ได้ระบุค่าระดับ (levels) ฟังก์ชัน factor() จะเรียกใช้ unique() และเรียงลำดับค่าจากน้อยไปมาก การเรียงลำดับนั้นขึ้นอยู่กับภาษาที่ใช้งานอยู่ ดังนั้นจึงไม่ใช่ลำดับ ASCII ธรรมดาเสมอไป ควรระบุค่าระดับ (levels) อย่างชัดเจนทุกครั้งที่ลำดับนั้นมีความหมาย

table(f) จะส่งคืนจำนวนนับที่มีชื่อสำหรับแต่ละระดับ และ prop.table(table(f)) จะแปลงจำนวนนับเหล่านั้นเป็นสัดส่วน ทั้งสองฟังก์ชันจะยังคงแสดงระดับที่ว่างเปล่า ซึ่งทำให้มีประโยชน์ในการค้นหาหมวดหมู่ที่หายไปหลังจากกรองข้อมูล กรอบข้อมูล.

ฟังก์ชัน factor() จะเปรียบเทียบทุกองค์ประกอบกับระดับที่คุณระบุ และค่าใดๆ ที่ไม่มีการจับคู่จะกลายเป็น NA แทนที่จะแสดงข้อผิดพลาด ตรวจสอบ setdiff(unique(x), your_levels) ก่อนทำการแปลง และระวังช่องว่างที่ไม่พึงประสงค์หรือการใช้ตัวพิมพ์ใหญ่และตัวพิมพ์เล็กที่แตกต่างกันในข้อมูลต้นฉบับ

ฟังก์ชัน `cut()` จะแบ่งเวกเตอร์ตัวเลขตามจุดแบ่งที่คุณกำหนด และส่งคืนค่าแฟกเตอร์ ส่งค่าป้ายกำกับสำหรับชื่อกลุ่มที่อ่านง่าย และตั้งค่า `ordered_result = TRUE` เมื่อกลุ่มเหล่านั้นได้ลำดับ ฟังก์ชัน `findInterval()` เป็นทางเลือกที่เร็วกว่าเมื่อต้องการเพียงดัชนีของช่วงข้อมูลเท่านั้น

ตั้งแต่ R เวอร์ชัน 4.0.0 ค่าเริ่มต้นจากโรงงานสำหรับ data.frame() และ read.csv() คือ stringsAsFactors = FALSE ดังนั้นคอลัมน์ข้อความจึงยังคงเป็นอักขระ สคริปต์เก่าที่อาศัยการแปลงอัตโนมัติจะต้องเรียกใช้ factor() อย่างชัดเจนกับคอลัมน์ที่ต้องการสร้างแบบจำลอง

Less ต่างจากแต่ก่อนมาก เอกสารอ้างอิงพื้นฐานของ R ระบุว่าสตริงที่เหมือนกันในปัจจุบันใช้พื้นที่จัดเก็บร่วมกัน ดังนั้นช่องว่างจึงมีขนาดเล็กในกรณีส่วนใหญ่ ปัจจัยต่างๆ ยังคงมีประโยชน์ในการตรวจสอบความถูกต้องของหมวดหมู่และแก้ไขลำดับระดับที่ใช้ในแบบจำลองและกราฟ

ฟังก์ชันการสร้างแบบจำลองส่วนใหญ่รับค่าแฟกเตอร์โดยตรงและสร้างค่าเปรียบเทียบจำลองโดยอัตโนมัติ ในขณะที่ฟังก์ชันอื่นๆ อีกมากมาย เรียนรู้เครื่อง แพ็กเกจต่างๆ คาดหวังเมทริกซ์ตัวเลข ฟังก์ชัน model.matrix() หรือการเข้ารหัสแบบ one-hot ช่วยแก้ปัญหานี้ได้ และแฟกเตอร์ที่มีลำดับสามารถรักษาระดับการจัดอันดับไว้ได้

ใช่. นักบิน GitHub ใช้งานได้ใน RStudio เวอร์ชัน 2023.09.0 และเวอร์ชันที่ใหม่กว่า และจะแนะนำคำเติมจากความคิดเห็นและโค้ดในไฟล์ที่เปิดอยู่ ให้ถือว่าลำดับระดับและการจัดการค่า NA เป็นเพียงข้อเสนอแนะเพื่อตรวจสอบ ไม่ใช่ข้อเท็จจริง

สรุปโพสต์นี้ด้วย: