Я думаю, это то, что вы ищете:
# creating a version of your data
PR1 = paste0("S", round(runif(length(PR),40,80)))
PR2 = paste0("S", round(runif(length(PR),40,80)))
PR3 = paste0("S", round(runif(length(PR),40,80)))
PR4 = paste0("S", round(runif(length(PR),40,80)))
PR5 = paste0("S", round(runif(length(PR),40,80)))
PR6 = paste0("S", round(runif(length(PR),40,80)))
PR7 = paste0("S", round(runif(length(PR),40,80)))
PR8 = paste0("S", round(runif(length(PR),40,80)))
PR9 = paste0("S", round(runif(length(PR),40,80)))
PR10 = paste0("S", round(runif(length(PR),40,80)))
PR11 = paste0("S", round(runif(length(PR),40,80)))
PR12 = paste0("S", round(runif(length(PR),40,80)))
PR13 = paste0("S", round(runif(length(PR),40,80)))
PR14 = paste0("S", round(runif(length(PR),40,80)))
PR15 = paste0("S", round(runif(length(PR),40,80)))
PatientID = paste0("PID", seq(1,length(PR1),1))
PRDAYS1 = round(runif(length(PR),1,10))
# turn all of the arrays into a data frame
data <- data.frame(PatientID, PR1, PR2, PR3, PR4, PR5,
PR6, PR7, PR8, PR9, PR10, PR11, PR12,
PR13, PR14, PR15, PRDAYS1, stringsAsFactors = F)
# your 6 procedure codes you are looking for
Procedures.of.interest = c("S55", "S50", "S42", "S60", "S59", "S52")
# make sure you have tidyverse installed - if you havent install.packages("tidyverse")
require(tidyverse)
# search all of the columns for your procedures
data <- data %>% group_by(PatientID) %>%
mutate(PR_bin = T %in% (Procedures.of.interest %in% c(PR1, PR2, PR3, PR4, PR5,
PR6, PR7, PR8, PR9, PR10, PR11, PR12,
PR13, PR14, PR15)))
# convert the trues to 1 and falses to 0
data$PR_bin <- ifelse(data$PR_bin == T, 1, 0)
# add the PR days if PR_bin was 1 otherwise add NA
data$PR_time <- ifelse(data$PR_bin == 1, data$PRDAYS1, NA)
# view the new data
View(data)