我有一个包含多个诊断列的数据集(即DIAG1,DIAG2,DIAG3等)。我希望创建一个循环来检查我的所有行的每一列,但我在每个列中都要查找多个诊断代码。
例如,我想在DIAG1,DIAG2,DIAG3等中找到代码xxx1和xxx3。
我的代码在下面的位置
1. df =我的数据帧
2. df $ illness =是我想要创建的变量
3. xxxx1 =代码我正在寻找
4. [26:34,57:72] = DIAG1等存在的列
**编辑: 示例数据:
DIAG3 DIAG4 DIAG5 DIAG6
1231 xxx1 5468 5468
1454 2352 4542 4864
xxx2 1235 1234 3564
1234 1589 xxx1 8498
我尝试执行的代码:
for (i in 1:nrow(df)) {
df$illness[i] <- ("xxx1" %in% df[i,26:34, 57:72] | "xxx3" %in%
df[i,26:34, 57:72]}
我希望循环执行:
DIAG3 DIAG4 DIAG5 DIAG6 Illness
1231 xxx1 5468 5468 TRUE
1454 2352 4542 4864 FALSE
xxx3 1235 1234 3564 TRUE
1234 1589 xxx1 8498 TRUE
代码运行但永远不会结束。我不知道我的错误在哪里。谢谢
答案 0 :(得分:1)
看起来 df 的子设置错误。
应该是df[i,c(26:34,57:72)]
。 df$illness[i]
应该是一个列表吗?
答案 1 :(得分:0)
我们可以通过循环遍历列来执行此操作,使用grepl
创建逻辑vector
,然后使用Reduce
vector
查看|
df1$Illness <- Reduce(`|`, lapply(df1, grepl, pattern = "xxx"))
df1$Illness
#[1] TRUE FALSE TRUE TRUE
db.collection.insert({ "b": [1, 3, 5, 6, 7, 10] })
}
db.collection.aggregate([{ "$project": { "c": { "$setDifference": [ [2,3,4], "$b" ] } } }])
答案 2 :(得分:0)
我假设xxxx1
实际上应该是一个数值,那么你可以简单地使用ifelse语句,例如:
dat <- data.frame(DIAG3 = c(1231,1454,2222,1234),
DIAG4 = c(1111,2352,1235,1589),
DIAG5 = c(5468,4542,1234,1111),
DIAG6 = c(5468,4864,3564,8498))
library(dplyr)
dat %>%
rowwise() %>%
mutate(Illness = ifelse(DIAG3==1111 | DIAG4==1111 | DIAG5==1111 | DIAG6==1111|
DIAG3==2222 | DIAG4==2222 | DIAG5==2222 | DIAG6==2222, "TRUE", "FALSE"))