根据条件在 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

最后一行是为了抓住 NAs。

数据

td_new <- structure(list(Geschlecht = c(0L, 1L, 1L, 0L), hang0 = c(15L, 45L, 7L, 11L)), class = "data.frame", row.names = c(NA, -4L))