我们希望将grepl同时应用于所有risk_code。所以我们一次得到每行一个结果。我们可以这样做
sapply
和
any
.
所以,我们可以去掉for循环,你的代码变成这样:
my_df <- read.table(text="Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 Diag_20
data data data data J123 F456 H789 E468
data data data data T452 NA NA NA", header=TRUE)
risk_codes <- c("F456", "XXX") # test codes
my_df$newcol <- apply(my_df,1,function(x)
any(sapply(risk_codes,
function(codes) grepl(codes,
x[c(5:24)]))))
结果是一个逻辑向量。
如果您仍然想使用1和0而不是TRUE/FALSE,您只需要完成以下操作:
my_df$new_col <- ifelse(my_df$newcol, 1, 0)
结果将是:
> my_df
Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 Diag_20 newcol
1 data data data data J123 F456 H789 E468 1
2 data data data data T452 <NA> <NA> <NA> 0