我对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)
这似乎是一个简单的问题,但我很难找到答案!
谢谢。
答案 0 :(得分:9)
您可以使用revalue
包中的plyr
在Analysis
数据框中创建新的因子列,并重命名级别:
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