2015-06-01 166 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

您可以使用revalueplyr包与更名水平的Analysis数据帧创建一个新的因素列:

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

你可以把值和代码在一个单独的数据帧,然后使用match,让他们成为你的主要数据帧:

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 
相关问题