繁体   English   中英

根据条件重新编码 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 中安装了“汽车”包,但我没有让“范围”重新编码工作(我试过

td_new$Hang <- recode(td_new$hang0, "0:22.99=0; 23:55=1; else=2")

我也无法使用 if-else-function。 我的最后一次尝试是

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

数据

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM