R 函数在现有数据帧中创建新的二进制变量?
此问题与前面的主题相关: 我希望使用类似的函数,但能够使用向量指定数据帧内要搜索的ICD9诊断变量(例如,“diag_1”、“diag_2”、“diag_1”等) 我试过了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
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
}