R - 计算类似字符串在多列

时间:2016-03-11 16:10:35

标签: r string dataframe apply grepl

来自之前的问题:R - return boolean if any strings in a vector appear in any of several columns

我认为我不需要计算出数据框中出现的向量中类似字符串的数量,但事实证明它是有用的信息。 D'哦!

问题: 我有一个大数据框,其中第5列到第24列是诊断代码。每排都是个人入院。向量 risk_codes 包含截断的诊断代码。我在数据框中寻找一个新专栏,告诉我20个诊断代码中是否出现任何risk_codes。问题是我需要部分匹配,而不是完全匹配。

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)

如果任何risk_codes与许可的诊断代码匹配,则成功将1返回到新列。

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

1 个答案:

答案 0 :(得分:1)

假设您指的是列而不是行,那么这应该成功:

df$code_count <- apply(df,1,function(x) 
                         sum(sapply(risk_codes, function(codes) grepl(codes,x[c(5:24)]))))