此问题与上一主题相关: How to use custom function to create new binary variables within existing dataframe?
我想使用类似的功能,但能够使用向量在数据帧中指定要搜索的ICD9诊断变量(例如," diag_1"," diag_2", " diag_1"等)
我试过
y<-c("diag_1","diag_2","diag_1")
diagnosis_func(patient_db, y, "2851", "Anemia")
但是我收到以下错误:
Error in `[[<-`(`*tmp*`, i, value = value) :
recursive indexing failed at level 2
以下是Benjamin在参考文章中的工作职能。但是,它一次只能从1个诊断变量起作用。最后,我需要创建一个新的二进制变量,通过查询数据帧的25个诊断变量来指示患者是否有特定的诊断。
* targetcolumn是icd9诊断变量&#34; diag_1&#34; ...&#34; diag_20&#34;是我想输入的那个
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")
非常感谢有关如何使此功能正常工作的任何帮助或指导。
最佳, 阿尔比特
答案 0 :(得分:1)
试试本杰明功能的这个修改版本:
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
}