2015-06-01 6 views
8

У меня есть ответы на обследования в моем data.frame(Analysis), которые включают в себя:

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

Я хочу, чтобы присвоить значение для каждого ответа, основываясь на их уровне. Например, "Strongly Agree" получает 2 в то время как "Agree" получает оценку 1. Мой желаемый результат будет:

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

Это кажется простой вопрос, но у меня возникают трудности в поиске ответа!

спасибо.Присвоить значение символьной строки

ответ

5

Вы можете использовать revalue из plyr пакета, чтобы создать новый столбец фактора в кадре Analysis данных с уровнями переименованы:

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

Вы можете поместить значения и коды в отдельном dataframe, а затем использовать match, чтобы получить их в основной dataframe:

dat <- data.frame(Q1,Q1_Score) 

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

Я проголосовал за использование пакета 'plyr', но мне также нравится ваш ответ, используя базу R. Спасибо. – user2716568

+3

Или даже просто 'c (« Полностью согласен »= 2,« Согласен »= 1,« Ни один »= 0,« Не согласен »= - 1) [Q1]' – thelatemail

2

Вы можете заказать их соответствующим образом в факторного, а затем преобразовать в числовой как так:

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

Вычитание 2, потому что самый низкий уровень фактора сохраняется как 1, и вы хотите, чтобы нижний уровень был -1.

В качестве альтернативы, один вкладыш, который возвращает фактор переменным вместо числовых значений:

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 
Смежные вопросы