gpt4 book ai didi

r - 如果任何列包含值列表则改变

转载 作者:行者123 更新时间:2023-12-05 08:36:12 25 4
gpt4 key购买 nike

我正在处理 ICD 代码,需要您的帮助以根据与神经病学相关的 ICD 条件改变一个额外的列“neuro”。这是我正在使用的示例数据集:

  ID  `ICD9 1`  `ICD9 2`  `ICD9 3` `ICD9 4` `ICD9 5` `ICD9 6` `ICD9 7` `ICD9 8` `ICD9 9`
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 20002038 927 NA NA NA NA NA NA NA NA
2 20003011 460 NA NA NA NA NA NA NA NA
3 20003019 320 V22 473 V22 V22 724 NA NA NA
4 20003026 719 490 729 724 NA NA NA NA NA
5 20004018 724 401 436 287 780 NA NA NA NA
6 20007016 523 339 NA NA NA NA NA NA NA

我会怎样:(a) 检查是否有任何 ICD9 列包含以下感兴趣的 ICD 代码:

ICD = c(320:337, 339:359 and 430:438)

(b) 然后根据包含感兴趣的 ICD 代码的行附加一个附加列“neuro”。

我已经尝试了以下很多错误的解决方案。第一种方法最有希望,但由于某种原因返回“0”:

for(i in 2:ncol(df)){
x = c(320:337, 339:359 and 430:438)
test <- test %>%
mutate(neuro = ifelse(i %in% x, 1, 0) )
}

我也试过这个,但不太成功:

x = c(320:337, 339:359 and 430:438)
df <- df %>%
mutate(neuro = ifelse(apply(df == x, 1, any), 1, 0))

我可能犯了很多很多错误,并且花了几个小时试图解决这个问题一直令人沮丧。非常感谢您的帮助 - 谢谢!

最佳答案

我们可能需要if_any

library(dplyr)
ICD <- c(320:337, 339:359, 430:438)
df <- df %>%
mutate(neuro = +(if_any(starts_with("ICD"), ~. %in% ICD)))

-输出

df
ID ICD 1 ICD 2 ICD 3 ICD 4 ICD 5 ICD 6 ICD 7 ICD 8 ICD 9 neuro
1 20002038 927 <NA> NA <NA> <NA> NA NA NA NA 0
2 20003011 460 <NA> NA <NA> <NA> NA NA NA NA 0
3 20003019 320 V22 473 V22 V22 724 NA NA NA 1
4 20003026 719 490 729 724 <NA> NA NA NA NA 0
5 20004018 724 401 436 287 780 NA NA NA NA 1
6 20007016 523 339 NA <NA> <NA> NA NA NA NA 1

当向量 length 大于 1 时,== 将无法正常工作,因为它是逐元素的,我们可能需要 %in%这应该循环 across 列,因为 %in% 需要一个向量作为输入(df == xdf %in% x 将不起作用)

数据

df <- structure(list(ID = c(20002038L, 20003011L, 20003019L, 20003026L, 
20004018L, 20007016L), `ICD 1` = c(927L, 460L, 320L, 719L, 724L,
523L), `ICD 2` = c(NA, NA, "V22", "490", "401", "339"), `ICD 3` = c(NA,
NA, 473L, 729L, 436L, NA), `ICD 4` = c(NA, NA, "V22", "724",
"287", NA), `ICD 5` = c(NA, NA, "V22", NA, "780", NA), `ICD 6` = c(NA,
NA, 724L, NA, NA, NA), `ICD 7` = c(NA, NA, NA, NA, NA, NA), `ICD 8` = c(NA,
NA, NA, NA, NA, NA), `ICD 9` = c(NA, NA, NA, NA, NA, NA)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))

关于r - 如果任何列包含值列表则改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69800555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com