r - 使用函数在 R 中重新编码变量
问题描述
我正在尝试重新编码一个变量,其比例如下:0、11、1、2、3、4、5、6、7、8、9、10。我想使用一个自然增加的比例0 到 11。我正在使用以下(笨拙的)代码:
for (i in 1:22){
if (data2[i,"mus_post_borg_di"] == 0) {
data2[i,"mus_post_borg_di_rescale"] <- 0
}
else if (data2[i,"mus_post_borg_di"] == 11) {
data2[i,"mus_post_borg_di_rescale"] <- 1
}
else if (data2[i,"mus_post_borg_di"] == 1) {
data2[i,"mus_post_borg_di_rescale"] <- 2
}
else if (data2[i,"mus_post_borg_di"] == 2) {
data2[i,"mus_post_borg_di_rescale"] <- 3
}
else if (data2[i,"mus_post_borg_di"] == 3) {
data2[i,"mus_post_borg_di_rescale"] <- 4
}
else if (data2[i,"mus_post_borg_di"] == 4) {
data2[i,"mus_post_borg_di_rescale"] <- 5
}
else if (data2[i,"mus_post_borg_di"] == 5) {
data2[i,"mus_post_borg_di_rescale"] <- 6
}
else if (data2[i,"mus_post_borg_di"] == 6) {
data2[i,"mus_post_borg_di_rescale"] <- 7
}
else if (data2[i,"mus_post_borg_di"] == 7) {
data2[i,"mus_post_borg_di_rescale"] <- 8
}
else if (data2[i,"mus_post_borg_di"] == 8) {
data2[i,"mus_post_borg_di_rescale"] <- 9
}
else if (data2[i,"mus_post_borg_di"] == 9) {
data2[i,"mus_post_borg_di_rescale"] <- 10
}
else if (data2[i,"mus_post_borg_di"] == 10) {
data2[i,"mus_post_borg_di_rescale"] <- 11
}
}
运行它会重新编码我想要的东西。但是,由于我正在使用相同比例的其他变量,我决定编写一个函数来避免不必要的复制/粘贴:
borg_rescale_fct <- function(x, y){
for (i in 1:22){
if (data2[i,x] == 0) {
data2[i,y] <- 0
}
else if (data2[i,x] == 11) {
data2[i,y] <- 1
}
else if (data2[i,x] == 1) {
data2[i,y] <- 2
}
else if (data2[i,x] == 2) {
data2[i,y] <- 3
}
else if (data2[i,x] == 3) {
data2[i,y] <- 4
}
else if (data2[i,x] == 4) {
data2[i,y] <- 5
}
else if (data2[i,x] == 5) {
data2[i,y] <- 6
}
else if (data2[i,x] == 6) {
data2[i,y] <- 7
}
else if (data2[i,x] == 7) {
data2[i,y] <- 8
}
else if (data2[i,x] == 8) {
data2[i,y] <- 9
}
else if (data2[i,x] == 9) {
data2[i,y] <- 10
}
else if (data2[i,x] == 10) {
data2[i,y] <- 11
}
}
我会认为以下电话:
borg_recode_fct("mus_base_borg_di", "mus_base_borg_di_rescale")
会工作。它没有,并返回所有 NA。
我意识到这是一种非常笨拙的重新编码方式。将其转换为因子变量并施加顺序会更好吗?谢谢!
解决方案
使用级别参数,例如:
x <- c(0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# [1] 0 11 1 2 3 4 5 6 7 8 9 10
factor(x, levels = c(0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
# [1] 0 11 1 2 3 4 5 6 7 8 9 10
# Levels: 0 11 1 2 3 4 5 6 7 8 9 10
as.numeric(factor(x, levels = c(0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))) - 1
# [1] 0 1 2 3 4 5 6 7 8 9 10 11
推荐阅读
- r - 如何将时间转换为标准格式并计算时差
- facebook-php-webdriver - 使用 visibilityOfElementLocated() 函数时会话过期
- async-await - Angular 9 async-await Uncaught (in promise) 错误
- r - R根据两个正则表达式将字符串拆分为两列
- reactjs - 即使存在第二个依赖项,也会发生 useEffect 无限循环
- django - Django:当主页已经有模板时,如何向我的主页添加另一个表单
- python - 为什么 sift.compute() 在 MSER 关键点上比在 SIFT 关键点上慢
- firebase - 无法使用 App Check 为 Firebase 存储生成调试令牌
- php - 当表格在 HTML2PDF 中使用 TCPDF 的页面末尾开始时,如何强制开始新表格以跳转到新页面
- flutter - 颤振 zxing2 扫描仪示例