我有一个数据帧,我想在其中添加一个新列(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))