r - 如果任何列包含值列表,则进行变异
问题描述
我正在使用 ICD 代码,需要您的帮助来尝试根据与神经病学相关的 ICD 条件来改变额外的列“神经”。这是我正在使用的示例数据集:
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))
我可能犯了很多很多错误,并且试图弄清楚这几个小时是令人沮丧的。感谢您的帮助 - 谢谢!
解决方案
也许我们可以试试
df$neuro <- +(rowSums(matrix(as.matrix(df[-1]) %in% ICD, nrow = nrow(df))) > 0)
这样
> 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
推荐阅读
- ios - 在ios swift中根据“id”参数获取不同的值
- sql - 为什么 AES_ENCRYPT 在 SQL 服务器上不起作用
- aws-lambda - 使用 CF 模板创建 AWS::Pinpoint::PushTemplate
- qt - 在 RowLayout 中使用其他元素标记自动换行
- mongodb - 如何使用 Mongoose 更新嵌套数组?
- java - java类外的访问接口
- ios - 扩展导致 Swift 中的清除按钮出现问题
- javascript - React/Javascript 在实现字典时遇到问题
- macos - Docker-compose, pip install -r requirements.txt' 返回一个非零代码:1
- asp.net - 我应该加密传输中的信息吗