gpt4 book ai didi

r - 在大于 R 中另一列的数组中查找最小值

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

我需要找到比另一列中的值大的三列的最小值。假设这五个人在一年中的不同月份入院,他们在住院前后多次心脏病发作。我需要住院后的第一次心脏病发作。


id<-c(100,105,108,200,205)
hosp<-c(3,5,2,6,2)
attack1<-c(1,6,3,4,1)
attack2<-c(4,7,9,10,NA)
attack3<-c(5,10,NA,NA,NA)
out<-c(7,12,11,12,9)

data <- data.frame(id,hosp,attack1,attack2,attack3,out)

id hosp attack1 attack2 attack3 out
1 100 3 1 4 5 7
2 105 5 6 7 10 12
3 108 2 3 9 NA 11
4 200 6 4 10 NA 12
5 205 2 1 NA NA 9
所以数据最终应该看起来像
   id hosp attack1 attack2 attack3 out afterh
1 100 3 1 4 5 7 4
2 105 5 6 7 10 12 6
3 108 2 3 9 NA 11 3
4 200 6 4 10 NA 12 10
5 205 2 1 NA NA 9 NA
这是我没有成功的尝试:
min_f<-function(a){
x<-min(a[a>hosp])
}

data %>% mutate_if(vars(attack1,attack2,attack3),min_f())

最佳答案

您可以使用以下解决方案。

  • 这里 c(...) 指的是数据集每一行中的所有变量,我只选择了那些以 attack 开头的变量。
  • 然后我只选择了那些大于 hosp 的对应值的值。在每一行中,因为您正在寻找大于 hosp 的值的第一个我用过 first提取该函数的函数
  • ..2也指第二个变量hosp的值每行
  • library(dplyr)
    library(purrr)

    data %>%
    mutate(afterh = pmap_dbl(., ~ {x <- c(...)[3:5];
    first(sort(x[x > ..2]))}))

    id hosp attack1 attack2 attack3 out afterh
    1 100 3 1 4 5 7 4
    2 105 5 6 7 10 12 6
    3 108 2 3 9 NA 11 3
    4 200 6 4 10 NA 12 10
    5 205 2 1 NA NA 9 NA
    作为@Greg 先生在一个非常大的数据集中提到的替代方案,我们可以使用 min函数代替 first(sort))以确保更快地评估以下解决方案。如果没有大于 hosp 的值就像最后一行 min函数将返回 Inf所以我确保它会返回值 0相反,您可以使用您喜欢的值更改它:
    data %>%
    mutate(afterh = pmap_dbl(., ~ {x <- c(...)[3:5];
    out <- min(x[x > ..2], na.rm = TRUE);
    if(!is.finite(out)) 0 else out}))

    id hosp attack1 attack2 attack3 out afterh
    1 100 3 1 4 5 7 4
    2 105 5 6 7 10 12 6
    3 108 2 3 9 NA 11 3
    4 200 6 4 10 NA 12 10
    5 205 2 1 NA NA 9 0

    关于r - 在大于 R 中另一列的数组中查找最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67940482/

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