【问题标题】:R - Using Stringr to identify a string across hundreds of rowsR - 使用 Stringr 识别数百行中的字符串
【发布时间】:2020-08-12 23:11:15
【问题描述】:

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

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

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

例如:

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

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

410.1, 410.71, 410.62, 410.42, ...这会持续 20 个额外的代码。但!它们都以 410 开头。

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

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

感谢大家的帮助!

【问题讨论】:

    标签: r stringr


    【解决方案1】:

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

    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”。

    (解决方案需要您在此处使用的数据结构,其中 dx 变量位于第 2 到 200 列。如果还有其他列,只需调整这些数字)

    【讨论】:

    • 这很好用!有没有办法测试多种模式?例如,如果它的 410 OR 412 等,则创建一个“礼物”。
    猜你喜欢
    • 2022-11-13
    • 2014-07-04
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多