为字符串赋值

时间:2015-06-01 00:58:41

标签: r

我对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)

这似乎是一个简单的问题,但我很难找到答案!

谢谢。

3 个答案:

答案 0 :(得分:9)

您可以使用revalue包中的plyrAnalysis数据框中创建新的因子列,并重命名级别:

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

答案 1 :(得分:5)

您可以将值和代码放在单独的数据框中,然后使用match将它们放入主数据框中:

dat <- data.frame(Q1,Q1_Score)

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

答案 2 :(得分: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