2015-06-01 28 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 
相關問題