วิธีใช้ mutate เพื่อสร้างตัวแปรใหม่ใน r
บทช่วยสอนนี้จะอธิบายวิธีใช้ฟังก์ชัน mutate() ใน R เพื่อเพิ่มตัวแปรใหม่ให้กับ data frame
การเพิ่มตัวแปรใหม่ใน R
ฟังก์ชันไลบรารี dplyr ต่อไปนี้สามารถใช้เพื่อเพิ่มตัวแปรใหม่ให้กับเฟรมข้อมูล:
mutate() – เพิ่มตัวแปรใหม่ให้กับ data frame ในขณะที่ยังคงรักษาตัวแปรที่มีอยู่ไว้
transmute() – เพิ่มตัวแปรใหม่ให้กับ data frame และลบตัวแปรที่มีอยู่ออก
mutate_all() – แก้ไขตัวแปรทั้งหมดใน data frame พร้อมกัน
mutate_at() – แก้ไขตัวแปรเฉพาะตามชื่อ
mutate_if() – แก้ไขตัวแปรทั้งหมดที่ตรงตามเงื่อนไขที่กำหนด
กลายพันธุ์()
ฟังก์ชัน mutate() จะเพิ่มตัวแปรใหม่ให้กับเฟรมข้อมูลโดยยังคงรักษาตัวแปรที่มีอยู่ทั้งหมดไว้ ไวยากรณ์พื้นฐานของ mutate() คือ:
data <- mutate (new_variable = existing_variable/3)
- data: บล็อกข้อมูลใหม่ที่จะกำหนดตัวแปรใหม่
- new_variable: ชื่อของตัวแปรใหม่
- existing_variable: ตัวแปรที่มีอยู่ในกรอบข้อมูลที่คุณต้องการดำเนินการเพื่อสร้างตัวแปรใหม่
ตัวอย่างเช่น รหัสต่อไปนี้สาธิตวิธีการเพิ่มตัวแปร root_sepal_width ใหม่ให้กับชุดข้อมูล ม่านตา ที่ฝัง:
#define data frame as the first six lines of the iris dataset data <- head(iris) #view data data # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 3.5 1.4 0.2 setosa #2 4.9 3.0 1.4 0.2 setosa #3 4.7 3.2 1.3 0.2 setosa #4 4.6 3.1 1.5 0.2 setosa #5 5.0 3.6 1.4 0.2 setosa #6 5.4 3.9 1.7 0.4 setosa #load dplyr library library(dplyr) #define new column root_sepal_width as the square root of the Sepal.Width variable data %>% mutate (root_sepal_width = sqrt(Sepal.Width)) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species root_sepal_width #1 5.1 3.5 1.4 0.2 setosa 1.870829 #2 4.9 3.0 1.4 0.2 setosa 1.732051 #3 4.7 3.2 1.3 0.2 setosa 1.788854 #4 4.6 3.1 1.5 0.2 setosa 1.760682 #5 5.0 3.6 1.4 0.2 setosa 1.897367 #6 5.4 3.9 1.7 0.4 setosa 1.974842
แปลงร่าง()
ฟังก์ชั่น transmute() เพิ่มตัวแปรใหม่ให้กับ data frame และลบตัวแปรที่มีอยู่ออก รหัสต่อไปนี้สาธิตวิธีการเพิ่มตัวแปรใหม่สองตัวให้กับชุดข้อมูลและลบตัวแปรที่มีอยู่ทั้งหมด:
#define data frame as the first six lines of the iris dataset data <- head(iris) #viewdata data # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 3.5 1.4 0.2 setosa #2 4.9 3.0 1.4 0.2 setosa #3 4.7 3.2 1.3 0.2 setosa #4 4.6 3.1 1.5 0.2 setosa #5 5.0 3.6 1.4 0.2 setosa #6 5.4 3.9 1.7 0.4 setosa #define two new variables and remove all existing variables data %>% transmute (root_sepal_width = sqrt(Sepal.Width), root_petal_width = sqrt(Petal.Width)) # root_sepal_width root_petal_width #1 1.870829 0.4472136 #2 1.732051 0.4472136 #3 1.788854 0.4472136 #4 1.760682 0.4472136 #5 1.897367 0.4472136 #6 1.974842 0.6324555
กลายพันธุ์_ทั้งหมด()
ฟังก์ชัน mutate_all() จะแก้ไขตัวแปรทั้งหมดในกรอบข้อมูลพร้อมกัน ช่วยให้คุณสามารถดำเนินการฟังก์ชันเฉพาะกับตัวแปรทั้งหมดได้โดยใช้ฟังก์ชัน funs() รหัสต่อไปนี้สาธิตวิธีการแบ่งคอลัมน์ทั้งหมดใน data frame ด้วย 10 โดยใช้ mutate_all() :
#define new data frame as the first six rows of iris without the Species variable data2 <- head(iris) %>% select(-Species) #view the new data frame data2 # Sepal.Length Sepal.Width Petal.Length Petal.Width #1 5.1 3.5 1.4 0.2 #2 4.9 3.0 1.4 0.2 #3 4.7 3.2 1.3 0.2 #4 4.6 3.1 1.5 0.2 #5 5.0 3.6 1.4 0.2 #6 5.4 3.9 1.7 0.4 #divide all variables in the data frame by 10 data2 %>% mutate_all (funs(./10)) # Sepal.Length Sepal.Width Petal.Length Petal.Width #1 0.51 0.35 0.14 0.02 #2 0.49 0.30 0.14 0.02 #3 0.47 0.32 0.13 0.02 #4 0.46 0.31 0.15 0.02 #5 0.50 0.36 0.14 0.02 #6 0.54 0.39 0.17 0.04
โปรดทราบว่าคุณสามารถเพิ่มตัวแปรเพิ่มเติมลงในเฟรมข้อมูลได้โดยการระบุชื่อใหม่เพื่อผนวกเข้ากับชื่อตัวแปรเก่า:
data2 %>% mutate_all (funs(mod = ./10))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length_mod
#1 5.1 3.5 1.4 0.2 0.51
#2 4.9 3.0 1.4 0.2 0.49
#3 4.7 3.2 1.3 0.2 0.47
#4 4.6 3.1 1.5 0.2 0.46
#5 5.0 3.6 1.4 0.2 0.50
#6 5.4 3.9 1.7 0.4 0.54
# Sepal.Width_mod Petal.Length_mod Petal.Width_mod
#1 0.35 0.14 0.02
#2 0.30 0.14 0.02
#3 0.32 0.13 0.02
#4 0.31 0.15 0.02
#5 0.36 0.14 0.02
#6 0.39 0.17 0.04
กลายพันธุ์_at()
ฟังก์ชัน mutate_at() แก้ไขตัวแปรเฉพาะตามชื่อ รหัสต่อไปนี้สาธิตวิธีการแบ่งตัวแปรเฉพาะสองตัวด้วย 10 โดยใช้ mutate_at() :
data2 %>% mutate_at (c("Sepal.Length", "Sepal.Width"), funs(mod = ./10))
# Sepal.Length Sepal.Width Petal.Length Petal.Width Sepal.Length_mod
#1 5.1 3.5 1.4 0.2 0.51
#2 4.9 3.0 1.4 0.2 0.49
#3 4.7 3.2 1.3 0.2 0.47
#4 4.6 3.1 1.5 0.2 0.46
#5 5.0 3.6 1.4 0.2 0.50
#6 5.4 3.9 1.7 0.4 0.54
# Sepal.Width_mod
#1 0.35
#2 0.30
#3 0.32
#4 0.31
#5 0.36
#6 0.39
mutate_if()
ฟังก์ชัน mutate_if() จะแก้ไขตัวแปรทั้งหมดที่ตรงตามเงื่อนไขที่กำหนด รหัสต่อไปนี้แสดงให้เห็นถึงวิธีการใช้ฟังก์ชัน mutate_if() เพื่อแปลงตัวแปรประเภท ปัจจัย ใด ๆ ให้พิมพ์ อักขระ :
#find variable type of each variable in a data frame data <- head(iris) sapply(data, class) #Sepal.Length Sepal.Width Petal.Length Petal.Width Species # "numeric" "numeric" "numeric" "numeric" "factor" #convert any variable of type factor to type character new_data <- data %>% mutate_if(is.factor, as.character) sapply(new_data, class) #Sepal.Length Sepal.Width Petal.Length Petal.Width Species # "numeric" "numeric" "numeric" "numeric" "character"
รหัสต่อไปนี้สาธิตวิธีการใช้ฟังก์ชัน mutate_if() เพื่อปัดเศษตัวแปร ตัวเลข ทั้งหมดให้เป็นทศนิยมตำแหน่งเดียว:
#define data as first six rows of iris dataset data <- head(iris) #view data data # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 3.5 1.4 0.2 setosa #2 4.9 3.0 1.4 0.2 setosa #3 4.7 3.2 1.3 0.2 setosa #4 4.6 3.1 1.5 0.2 setosa #5 5.0 3.6 1.4 0.2 setosa #6 5.4 3.9 1.7 0.4 setosa #round any variables of type numeric to one decimal place data %>% mutate_if(is.numeric, round, digits = 0) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5 4 1 0 setosa #2 5 3 1 0 setosa #3 5 3 1 0 setosa #4 5 3 2 0 setosa #5 5 4 1 0 setosa #6 5 4 2 0 setosa
อ่านเพิ่มเติม:
คำแนะนำในการใช้(), lapply(), sapply() และ tapply() ใน R
วิธีจัดเรียงเส้นใน R
วิธีกรองแถวใน R