R 函数在现有数据帧中创建新的二进制变量?

R 函数在现有数据帧中创建新的二进制变量?,r,R,此问题与前面的主题相关: 我希望使用类似的函数,但能够使用向量指定数据帧内要搜索的ICD9诊断变量(例如,“diag_1”、“diag_2”、“diag_1”等) 我试过了 y<-c("diag_1","diag_2","diag_1") diagnosis_func(patient_db, y, "2851", "Anemia") y试试本杰明函数的这个修改版本: diagnosis_func <- function(data, target_col, icd, new_c

此问题与前面的主题相关:

我希望使用类似的函数,但能够使用向量指定数据帧内要搜索的ICD9诊断变量(例如,“diag_1”、“diag_2”、“diag_1”等)

我试过了

y<-c("diag_1","diag_2","diag_1") 

diagnosis_func(patient_db, y, "2851", "Anemia")

y试试本杰明函数的这个修改版本:

diagnosis_func <- function(data, target_col, icd, new_col){
  pattern <- sprintf("^(%s)", 
                     paste0(icd, collapse = "|"))

  new <- apply(data[target_col], 2, function(x) grepl(pattern=pattern, x)) + 0L
  data[[new_col]] <- ifelse(rowSums(new)>0, 1,0)
  data
}

diagnosis\u func最好将向量馈送到
lappy
。类似于
lappy(y,函数(i)diagnosis\u func(data=df,target\u col=i,icd=icd,newcol=i))
。也许你得让自己发挥点作用,但我想这是更好的路线。谢谢lmo!将尝试此ALBIT,问题是Benjamin函数中的
grepl
将在数据帧的一列上工作。假设您有多个列,
target\u col
diagnosis_func <- function(data, target_col, icd, new_col){
  pattern <- sprintf("^(%s)", 
                 paste0(icd, collapse = "|"))

  data[[new_col]] <- grepl(pattern = pattern, 
                       x = data[[target_col]]) + 0L
  data
}

diagnosis_func(patient_db, "diag_1", "2851", "Anemia")
 pattern = paste("^(", paste0("2851", collapse = "|"), ")", sep = "")

df$anemia<-ifelse(rowSums(sapply(df[c("diag_1","diag_2","diag_3")], grepl, pattern = pattern)) != 0,"1","0")
diagnosis_func <- function(data, target_col, icd, new_col){
  pattern <- sprintf("^(%s)", 
                     paste0(icd, collapse = "|"))

  new <- apply(data[target_col], 2, function(x) grepl(pattern=pattern, x)) + 0L
  data[[new_col]] <- ifelse(rowSums(new)>0, 1,0)
  data
}