R - 计算相似字符串在几列中出现的次数
R - Count the number of times similar strings appear in several columns
根据之前的问题:
我认为我不需要计算我的向量中出现在我的数据框中的相似字符串的数量,但事实证明这是有用的信息。哦!
问题:
我有一个大数据框,其中第 5 列到第 24 列是诊断代码。每行是一个人入院。向量 risk_codes 包含截断的诊断代码。我在数据框中寻找一个新列,告诉我是否有 risk_codes 出现在 20 个诊断代码中。问题是我需要部分匹配,而不是完全匹配。
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
执行此操作的代码:
df$newcol <- apply(df,1,function(x) any(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)]))))
df$newcol <- ifelse(df$newcol,1,0)
此成功returns 1 到新列如果有risk_codes 符合入院的诊断代码。
risk_codes <- c("J1","F45","H987")
Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 newcol
data data data data J123 F456 H789 E468 1
data data data data T452 NA NA NA 0
额外的并发症:现在我想计算匹配的数量,而不是仅仅看到有匹配。这可能是对第一行代码的操纵,但我正在努力寻找逻辑。
risk_codes <- c("J1","F45","H987")
Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 newcol count
data data data data J123 F456 H789 E468 1 2
data data data data T452 NA NA NA 0 0
假设您指的是列而不是行,那么这应该会成功:
df$code_count <- apply(df,1,function(x)
sum(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)]))))
根据之前的问题:
我认为我不需要计算我的向量中出现在我的数据框中的相似字符串的数量,但事实证明这是有用的信息。哦!
问题: 我有一个大数据框,其中第 5 列到第 24 列是诊断代码。每行是一个人入院。向量 risk_codes 包含截断的诊断代码。我在数据框中寻找一个新列,告诉我是否有 risk_codes 出现在 20 个诊断代码中。问题是我需要部分匹配,而不是完全匹配。
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
执行此操作的代码:
df$newcol <- apply(df,1,function(x) any(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)]))))
df$newcol <- ifelse(df$newcol,1,0)
此成功returns 1 到新列如果有risk_codes 符合入院的诊断代码。
risk_codes <- c("J1","F45","H987")
Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 newcol
data data data data J123 F456 H789 E468 1
data data data data T452 NA NA NA 0
额外的并发症:现在我想计算匹配的数量,而不是仅仅看到有匹配。这可能是对第一行代码的操纵,但我正在努力寻找逻辑。
risk_codes <- c("J1","F45","H987")
Col1 Col2 Col3 Col4 Diag_1 Diag_2 Diag_3 ... Diag_20 newcol count
data data data data J123 F456 H789 E468 1 2
data data data data T452 NA NA NA 0 0
假设您指的是列而不是行,那么这应该会成功:
df$code_count <- apply(df,1,function(x)
sum(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)]))))