![](/img/trans.png)
[英]What is the simplest way to recode a variable based on conditions of another variable in 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.