首页 > 解决方案 > 更改变量的值(情绪,0-5 比例到 5-0 比例)

问题描述

我想根据人们对一项调查的回答来衡量他们的情绪转变-5,你的压力有多大:0 完全没有压力,5 非常有压力'。数据如下所示:

样本数据

我需要重新调整所有积极情绪问题的级别,所以:5 到 0、4 到 1、3 到 2、2 到 3、1 到 4、0 到 5。

我尝试编写一些代码,但我认为它不正确,因为在代码末尾每个 0 都会再次从 5 更改为 0:

mood_cleaned$cheerful[mood_cleaned$cheerful==0] <- 5
mood_cleaned$cheerful[mood_cleaned$cheerful==1] <- 4
mood_cleaned$cheerful[mood_cleaned$cheerful==2] <- 3
mood_cleaned$cheerful[mood_cleaned$cheerful==3] <- 2
mood_cleaned$cheerful[mood_cleaned$cheerful==4] <- 1
mood_cleaned$cheerful[mood_cleaned$cheerful==5] <- 0

代码也太长了,我有 13 个变量要更改,所以必须有一个更简单的方法?谢谢!

标签: r

解决方案


您的代码不起作用,因为您不是同时按顺序执行的。您有多种选择,包括recode(),case_when等。但在您的情况下,所有列的最简单操作都是相同的:

mood_cleaned$cheerful <- (mood_cleaned$cheerful-5)*-1

这应该做你想要的,例如 (5-5) -1=0, (4-5) -1=1 等等。

顺便说一句:

library(dplyr)

mood_cleaned %>%
mutate(cheerful = (cheerful-5)*-1)

# or this way

mood_cleaned %>%
mutate(cheerful = case_when( cheerful == 5 ~ 0,
                             cheerful == 4 ~ 1,
                             ...)

# or with a fancy self-defined function

reverse_scale <- function(column){
new_value = (column-max(column))*-1
}

mood_cleaned$cheerful <- reverse_scale(mood_cleaned$cheerful)

编辑:

我还看到你需要一次做 13 个变量,所以这个解决方案应该是最好的:

library(dplyr)

# define universal function to reverse scaleS
reverse_scale <- function(column){
new_value = (column-max(column))*-1
}

# apply in dplyr logic to all columns
mood_cleaned %>%
 mutate_at(.vars = 2:15, .funs = reverse_scale) # this works for columns 2 to 15, change numbers as needed

# or 

mood_cleaned %>%
 mutate_at(.vars = -1, .funs = reverse_scale) # this works for all columns except the first one

推荐阅读