R-使用Stringr识别数百行中的字符串

问题描述

我有一个数据库,一些人可以进行多次诊断。我过去曾发布过类似的问题,但现在我需要解决一些细微差别:

R- How to test multiple 100s of similar variables against a condition

我有这个数据集(这是SAS文件的导入)

ID dx1  dx2  dx3  dx4  dx5  dx6 .... dx200
1  343  432  873  129  12   123       3445
2  34   12   44
3  12 
4  34   56

最初,我希望能够在不使用数百条if语句的情况下,如果任何“ dxs”等于某个数字,则可以创建一个新变量?所有不同的变量都具有相同的格式(dx#)。所以我使用了以下代码

例如:

dataset$highbloodpressure  <- rowSums(screen[0:832] == "410") > 0

效果很好。但是,对于同一诊断,有许多不同的代码。例如,心脏病发作可以定义为:

410.1, 410.71, 410.62, 410.42, ...这将继续提供20个其他代码。但!它们都以410开头。

我曾考虑过使用stringr(变量是一个字符串)来标识常见的代码组件(例如上例中的410),但不确定如何在rowums的上下文中使用它。

如果有人对此有任何建议,请告诉我!

感谢所有帮助!

解决方法

您可以使用grepl()函数,如果存在值,该函数将返回TRUE。为了同时检查所有列,只需将所有列折叠为每行一个字符:

df$dx.410 = NA
for(i in 1:dim(df)[1]){
  if(grepl('410',paste(df[i,2:200],collapse=' '))){
    df$dx.410[i]="Present"
  }
}

这将遍历所有行,创建一个包含该案例所有诊断的大字符,如果任何列包含410诊断,则在dx.410列中写“ Present”。

(该解决方案期望您具有第2到200列中dx变量的数据结构。如果还有其他列,只需调整这些数字即可)