r - 更改变量的值(情绪,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 个变量要更改,所以必须有一个更简单的方法?谢谢!
解决方案
您的代码不起作用,因为您不是同时按顺序执行的。您有多种选择,包括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
推荐阅读
- javascript - 反应引导布局问题
- oauth-2.0 - 如何修复“E_OAUTH_STATE_MISMATCH:Oauth 状态不匹配”
- r - 如何使用顺序过滤器的结果来识别更大的组
- rust - `__self` 是一个 `&` 引用,所以它所引用的数据不能被借用为可变的
- python - 绘制分类数据时如何告诉数据着色器对 NA 值使用灰色
- php - 如何使用ajax发送到控制器?
- node.js - 使用组合查询时 Firebase Firestore 返回空数组
- c++ - 将值从一个堆栈传输到另一个堆栈,在 C++ 中保持相同的顺序
- passwords - 从 executionHistory.bin 中知道加密的密钥库密码
- algorithm - 如何找到窗口的最大对的计数