问题描述
我有一个数据库,一些人可以进行多次诊断。我过去曾发布过类似的问题,但现在我需要解决一些细微差别:
R- How to test multiple 100s of similar variables against a condition
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变量的数据结构。如果还有其他列,只需调整这些数字即可)