根据条件在 R 中重新编码连续变量
Recode continuous variable in R based on conditions
我想将用 SPSS 编写的语法“翻译”成 R 代码,但我是 R 的初学者并且正在努力让它工作。
SPSS 语法是
DO IF (Geschlecht = 0).
RECODE hang0 (SYSMIS=SYSMIS) (Lowest thru 22.99=0) (23 thru 55=1) (55.01 thru Highest=2)
INTO Hang.
ELSE IF (Geschlecht = 1).
RECODE hang0 (SYSMIS=SYSMIS) (Lowest thru 21.99=0) (22 thru 54=1) (54.01 thru Highest=2)
INTO Hang.
END IF.
我已经在 R 中安装了“car”-package,但我无法使用“range”重新编码(我试过
td_new$Hang <- recode(td_new$hang0, "0:22.99=0; 23:55=1; else=2")
我也无法使用 if-else-函数。我最后一次尝试是
if(td_new$Geschlecht == 0){
td_new$Hang <- td_new$hang0 = 3
} else if (td_new$Geschlecht == 1) {
td_new$Hang <- td_new$hang0 = 5)
} else
td_new$hang0 <- NA
(没有重新编码,只是为了测试 if-else 函数)。
如果有人帮助,将非常高兴!
提前致谢:)!
抱歉,编辑添加:
数据结构如下:
Geschlecht hang0
0 15
1 45
1 7
0 11
我想重新编码 hang0 这样
对于男孩 (Geschlecht = 0):所有值 < 23 = 0,23 和 55 之间的值 = 1,所有值 > 55 = 2
对于女孩 (Geschlecht = 1):所有值 < 22 = 0,23 和 54 之间的值 = 1,所有值 > 54 = 2
这是 case_when
的方法:
library(dplyr)
td_new %>%
mutate(Hang = case_when(Geschlecht = 0 & hang0 < 23 ~ 0,
Geschlecht = 0 & hang0 >= 23 & hang0 < 55 ~ 1,
Geschlecht = 0 & hang0 >= 55 ~ 2,
Geschlecht = 1 & hang0 < 22 ~ 0,
Geschlecht = 1 & hang0 >= 22 & hang0 < 54 ~ 1,
Geschlecht = 1 & hang0 >= 54 ~ 2,
TRUE ~ NA_real_))
# Geschlecht hang0 Hang
#1 0 15 0
#2 1 45 1
#3 1 7 0
#4 0 11 0
最后一行是为了抓住 NA
s。
数据
td_new <- structure(list(Geschlecht = c(0L, 1L, 1L, 0L), hang0 = c(15L, 45L, 7L, 11L)), class = "data.frame", row.names = c(NA, -4L))
我想将用 SPSS 编写的语法“翻译”成 R 代码,但我是 R 的初学者并且正在努力让它工作。
SPSS 语法是
DO IF (Geschlecht = 0).
RECODE hang0 (SYSMIS=SYSMIS) (Lowest thru 22.99=0) (23 thru 55=1) (55.01 thru Highest=2)
INTO Hang.
ELSE IF (Geschlecht = 1).
RECODE hang0 (SYSMIS=SYSMIS) (Lowest thru 21.99=0) (22 thru 54=1) (54.01 thru Highest=2)
INTO Hang.
END IF.
我已经在 R 中安装了“car”-package,但我无法使用“range”重新编码(我试过
td_new$Hang <- recode(td_new$hang0, "0:22.99=0; 23:55=1; else=2")
我也无法使用 if-else-函数。我最后一次尝试是
if(td_new$Geschlecht == 0){
td_new$Hang <- td_new$hang0 = 3
} else if (td_new$Geschlecht == 1) {
td_new$Hang <- td_new$hang0 = 5)
} else
td_new$hang0 <- NA
(没有重新编码,只是为了测试 if-else 函数)。
如果有人帮助,将非常高兴!
提前致谢:)!
抱歉,编辑添加: 数据结构如下:
Geschlecht hang0 0 15 1 45 1 7 0 11
我想重新编码 hang0 这样 对于男孩 (Geschlecht = 0):所有值 < 23 = 0,23 和 55 之间的值 = 1,所有值 > 55 = 2 对于女孩 (Geschlecht = 1):所有值 < 22 = 0,23 和 54 之间的值 = 1,所有值 > 54 = 2
这是 case_when
的方法:
library(dplyr)
td_new %>%
mutate(Hang = case_when(Geschlecht = 0 & hang0 < 23 ~ 0,
Geschlecht = 0 & hang0 >= 23 & hang0 < 55 ~ 1,
Geschlecht = 0 & hang0 >= 55 ~ 2,
Geschlecht = 1 & hang0 < 22 ~ 0,
Geschlecht = 1 & hang0 >= 22 & hang0 < 54 ~ 1,
Geschlecht = 1 & hang0 >= 54 ~ 2,
TRUE ~ NA_real_))
# Geschlecht hang0 Hang
#1 0 15 0
#2 1 45 1
#3 1 7 0
#4 0 11 0
最后一行是为了抓住 NA
s。
数据
td_new <- structure(list(Geschlecht = c(0L, 1L, 1L, 0L), hang0 = c(15L, 45L, 7L, 11L)), class = "data.frame", row.names = c(NA, -4L))