Khóa học
Nếu bạn muốn tham gia khóa Intro to R miễn phí của chúng tôi, đây là liên kết.
Các mức của factor
Khi bạn lần đầu nhận một bộ dữ liệu, bạn thường sẽ thấy nó chứa các factor với những mức (level) cụ thể. Tuy nhiên, đôi khi bạn sẽ muốn đổi tên các mức này cho rõ ràng hơn hoặc vì lý do khác. R cho phép bạn làm điều này với hàm levels():
levels(factor_vector) <- c("name1", "name2",...)
Một minh họa điển hình là dữ liệu thô được cung cấp bởi một khảo sát. Một câu hỏi phổ biến trong mọi bảng hỏi là giới tính của người trả lời. Ở đây, để đơn giản, chỉ có hai hạng mục được ghi nhận, "M" và "F". (Thường bạn sẽ cần nhiều hạng mục hơn cho dữ liệu khảo sát; dù thế nào đi nữa, bạn dùng factor để lưu trữ dữ liệu phân loại.)
survey_vector <- c("M", "F", "F", "M", "M")
Ghi giới tính bằng các ký hiệu viết tắt "M" và "F" có thể tiện khi bạn thu thập dữ liệu bằng bút và giấy, nhưng có thể gây nhầm lẫn khi phân tích dữ liệu. Lúc đó, bạn thường sẽ muốn đổi các mức của factor thành "Male" và "Female" thay vì "M" và "F" cho rõ ràng.
Lưu ý: thứ tự mà bạn gán các mức là quan trọng. Nếu bạn gõ levels(factor_survey_vector), bạn sẽ thấy nó xuất ra [1] "F" "M". Nếu bạn không chỉ định các mức của factor khi tạo vector, R sẽ tự động gán theo thứ tự bảng chữ cái. Để ánh xạ đúng "F" sang "Female" và "M" sang "Male", các mức nên được đặt là c("Female", "Male"), theo thứ tự này.
Hướng dẫn
- Xem đoạn mã tạo một vector factor từ
survey_vector. Bạn sẽ dùngfactor_survey_vectorở bước tiếp theo. - Thay đổi các mức của
factor_survey_vectorthànhc("Female", "Male"). Chú ý thứ tự của các phần tử trong vector.
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
msg = "Do not change the definition of survey_vector!" test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) msg = "Do not change or remove the code to create the factor vector." test_function("factor", "x", not_called_msg = msg, incorrect_msg = msg) # MC-note: ideally would want to test assign operator <-, and have it highlight whole line. # MC-note: or negate this test_student_typed, to highlight where they type this incorrect phrase # test_student_typed('c("Male", "Female")') test_object("factor_survey_vector", eq_condition = "equal", incorrect_msg = paste("Did you assign the correct factor levels to factor_survey_vector? Use levels(factor_survey_vector) <- c(\"Female\", \"Male\"). Remember that R is case sensitive!")) success_msg("Wonderful! Proceed to the next exercise.")
Chú ý thứ tự bạn phải nhập các mức của factor. Gợi ý: xem thứ tự các mức được in ra khi gõ levels(factor_survey_vector).
Tóm tắt một factor
Sau khi hoàn thành khóa học này, một trong những hàm yêu thích của bạn trong R sẽ là summary(). Hàm này sẽ cho bạn cái nhìn nhanh về nội dung của một biến:
summary(my_var)
Quay lại khảo sát của chúng ta, bạn muốn biết có bao nhiêu câu trả lời "Male" trong nghiên cứu, và bao nhiêu câu trả lời "Female". Hàm summary() sẽ cho bạn câu trả lời.
Hướng dẫn
Yêu cầu summary() cho survey_vector và factor_survey_vector. Diễn giải kết quả của cả hai vector. Trong trường hợp này, chúng có hữu ích như nhau không?
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
# Generate summary for factor_survey_vector
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
summary(survey_vector)
# Generate summary for factor_survey_vector
summary(factor_survey_vector)
msg = "Do not change anything about the first few lines that define survey_vector and factor_survey_vector." test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) test_object("factor_survey_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg) msg <- "Have you correctly used summary() to generate a summary for %s?" test_output_contains("summary(survey_vector)", incorrect_msg = sprintf(msg, "survey_vector")) test_output_contains("summary(factor_survey_vector)", incorrect_msg = sprintf(msg, "factor_survey_vector")) success_msg("Nice! Have a look at the output. The fact that you identified \"Male\" and \"Female\" as factor levels in factor_survey_vector enables R to show the number of elements for each category.")
Gọi hàm summary() cho cả survey_vector và factor_survey_vector, đơn giản vậy thôi!
Ordered Factors
Vì "Male" và "Female" là các mức factor không có thứ tự (hay còn gọi là danh định), R trả về một cảnh báo, cho biết toán tử lớn hơn là không có ý nghĩa. Như đã thấy trước đó, R gán giá trị tương đương cho các mức đối với những factor như vậy.
Nhưng không phải lúc nào cũng vậy! Đôi khi bạn cũng sẽ làm việc với các factor có một thứ tự tự nhiên giữa các hạng mục. Nếu vậy, chúng ta phải đảm bảo truyền thông tin này cho R...
Giả sử bạn đang dẫn dắt một nhóm nghiên cứu gồm năm nhà phân tích dữ liệu và bạn muốn đánh giá hiệu suất của họ. Để làm điều này, bạn theo dõi tốc độ của họ, đánh giá mỗi nhà phân tích là "slow", "medium" hoặc "fast", và lưu kết quả vào speed_vector.
Hướng dẫn
Trước hết, gán cho speed_vector một vector gồm 5 phần tử, mỗi phần tử cho một nhà phân tích. Mỗi phần tử phải là một trong "slow", "medium" hoặc "fast". Dùng danh sách dưới đây:
- Nhà phân tích 1 là medium,
- Nhà phân tích 2 là slow,
- Nhà phân tích 3 là slow,
- Nhà phân tích 4 là medium và
- Nhà phân tích 5 là fast.
Chưa cần chỉ định đây là factor.
# Create speed_vector
speed_vector <-
# Create speed_vector
speed_vector <- c("medium", "slow", "slow", "medium", "fast")
test_object("speed_vector",
incorrect_msg = "speed_vector should be a vector with 5 entries, one for each analyst's speed rating. Don't use capital letters; R is case sensitive!") success_msg("A job well done! Continue to the next exercise.")
Gán cho speed_vector một vector chứa các chuỗi ký tự "slow", "medium" hoặc "fast".
Nếu bạn muốn học thêm từ khóa học này, đây là liên kết.