2015-06-01 16 views
8

tôi có phản ứng với một cuộc khảo sát trong data.frame(Analysis) tôi bao gồm:

Q1 <- c("Agree", "Strongly Agree", "Disagree", "Neither", "Agree", "Neither")

Tôi muốn gán giá trị cho mỗi câu trả lời, dựa vào mức độ của họ. Ví dụ, "Strongly Agree" nhận 2 trong khi "Agree" nhận được một điểm số 1. Sản lượng của tôi mong muốn sẽ là:

Q1 <- c("Agree", "Strongly Agree", "Disagree", "Neither", "Agree", "Neither")
Q1_Score <- c(1, 2, -1, 0, 1, 0)

Điều này có vẻ như một câu hỏi đơn giản nhưng tôi đang gặp khó khăn trong việc tìm kiếm một câu trả lời!

Cảm ơn bạn.Gán một giá trị cho nhân vật chuỗi

Trả lời

5

Bạn có thể sử dụng revalue từ gói plyr để tạo ra một cột yếu tố mới trong khung Analysis dữ liệu của bạn với các mức đổi tên:

library(plyr) 
Analysis$Q1_Score <- revalue(Analysis$Q1, 
       c("Strongly Agree"="2", "Agree"="1", "Neither"="0", "Disagree"="-1")) 
5

Bạn có thể đặt các giá trị và các mã trong một dataframe riêng biệt và sau đó sử dụng match để có được chúng vào dataframe chính của bạn:

dat <- data.frame(Q1,Q1_Score) 

Analysis$Q1_Score <- dat$Q1_Score[match(Analysis$Q1, dat$Q1)] 
+0

Tôi đã bỏ phiếu cho câu trả lời cho việc sử dụng gói 'plyr' nhưng tôi cũng thích câu trả lời của bạn bằng cách sử dụng cơ sở R. Cảm ơn bạn. – user2716568

+3

Hoặc thậm chí chỉ 'c (" Rất đồng ý "= 2," Đồng ý "= 1," Không "= 0," Không đồng ý "= - 1) [Q1]' – thelatemail

2

Bạn có thể sắp xếp chúng một cách thích hợp trong một biến yếu tố, sau đó chuyển sang số như như vậy:

Q1 <- factor(Q1, levels=c("Disagree","Neither","Agree","Strongly Agree")) 
as.numeric(Q1)-2 
#[1] 1 2 -1 0 1 0 

Bạn trừ 2 vì mức yếu tố thấp nhất được lưu trữ dưới dạng 1 và bạn muốn mức thấp nhất là -1.

Ngoài ra, một lớp lót mà trả về một biến yếu tố thay vì numerics:

factor(Q1, levels=c("Disagree","Neither","Agree","Strongly Agree"), labels=c(-1,0,1,2)) 
#[1] 1 2 -1 0 1 0 
#Levels: -1 0 1 2 
Các vấn đề liên quan