有条件地在R中的数据帧中创建一个新列(相当于SAS中的if-then语句)



我有一个数据帧,我想在其中添加一个新列(newcol(,该列基于有条件地应用于其他列(参数、值(。代码必须以这样的方式编写:;如果值没有丢失,则如果参数="0";SYSBP";并且值>140,并且如果参数="0";DIABP";并且值<80,则newcol="0";Y";。else条件没有值,必须保持为空。

数据集一瞥

PATIENT parameter value
001     SYSBP     190
001     DIABP     78
001     SYSBP     180
001     DIABP     72
002     SYSBP     NA
002     DIABP     NA
002     SYSBP     180
002     DIABP     72

作为一名SAS程序员,我正在寻找一个等价于if-then语句的语句,我发现ifelse((是R中最接近的语句,如果有人知道if-then匹配的更好匹配,那么请帮我知道。

基本R

transform(dat, ABC = ifelse( (parameter == "SYSBP" & value > 140) | (parameter == "DIABP" & value < 80), "Y", "unk"))
#   PATIENT parameter value  ABC
# 1       1     SYSBP   190    Y
# 2       1     DIABP    78    Y
# 3       1     SYSBP   180    Y
# 4       1     DIABP    72    Y
# 5       2     SYSBP    NA <NA>
# 6       2     DIABP    NA <NA>
# 7       2     SYSBP   180    Y
# 8       2     DIABP    72    Y

dplyr

library(dplyr)
dat %>%
mutate(ABC = if_else( (parameter == "SYSBP" & value > 140) | (parameter == "DIABP" & value < 80), "Y", "unk"))
#   PATIENT parameter value  ABC
# 1       1     SYSBP   190    Y
# 2       1     DIABP    78    Y
# 3       1     SYSBP   180    Y
# 4       1     DIABP    72    Y
# 5       2     SYSBP    NA <NA>
# 6       2     DIABP    NA <NA>
# 7       2     SYSBP   180    Y
# 8       2     DIABP    72    Y

数据

dat <- structure(list(PATIENT = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), parameter = c("SYSBP", "DIABP", "SYSBP", "DIABP", "SYSBP", "DIABP", "SYSBP", "DIABP"), value = c(190L, 78L, 180L, 72L, NA, NA, 180L, 72L)), class = "data.frame", row.names = c(NA, -8L))

最新更新