gpt4 book ai didi

r - 带 if else 的 for 循环

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

我有一个 df,它的一部分类似于以下内容

| Number|Category| A1|A2|B1|B2|C1|C2|A |B |C |
| ------| -------|---|--|--|--|--|--|--|--|--|
| 1 | 1 | 10|30|5 |15|NA|NA|5 |10|NA|
| 2 | 2 | 10|30|5 |15|25|35|40|20|45|
条件是
  • A1 & A2、B1 & B2、C1 & C2 分别是因子A、B、C 的下限和上限
  • A、B、C 列代表测量值。
  • 如果测量值低于下限,则系数为 "passed" ,
  • 如果它在两个限制之间,那么因子在 "danger" ,
  • 如果测量值高于上限,则为 "failed" .
  • 对于 category=1我们被允许只有 1在其中一个因素中失败,在这种情况下,我们将 Assets 分类为 "risk" ,
  • 但是如果我们有 2 次失败,那么第 1 行中的 Assets "fail" .
  • 对于 Category=2允许 2 次失败。如果一个因素失败,则在 "at risk" , 如果我们有 2 个失败是 "risk"我们有 3 次失败,然后是 "fail" .

  • 所以我想为每一行( Assets )计算每个因素的状态,然后是 Assets 的状态。我正在尝试使用 for 循环和 if-else 语句来遍历每一行的所有这些列,但似乎很难,因为我是初学者。最终结果是将以下列附加到数据集。先感谢您
    |Number|Aa    |Bb    |Cc    |Result |
    |------|------|------|------|-------|
    |1 |passed|danger|NA | risk |
    |2 |failed|failed|failed| failed|

    最佳答案

    这可以在 dplyr 中完成只有没有偶reshaping数据或使用任何循环(for/while)。使用 across , cur_data()cur_column()这当然是 dplyr 的强大功能。

    library(dplyr, warn.conflicts = F)

    df
    #> Number Category A1 A2 B1 B2 C1 C2 A B C
    #> 1 1 1 10 30 5 15 NA NA 5 10 NA
    #> 2 2 2 10 30 5 15 25 35 40 20 45

    df %>% group_by(Number, Category) %>%
    transmute(across(c('A', 'B', 'C'), ~ case_when(is.na(.) | is.na(get(paste0(cur_column(), 1))) |
    is.na(get(paste0(cur_column(), 2))) ~ NA_character_,
    . < get(paste0(cur_column(), 1)) ~ 'passed',
    . <= get(paste0(cur_column(), 2)) ~ 'danger',
    TRUE ~ 'failed'),
    .names = '{.col}{tolower(.col)}')) %>%
    mutate(Result = ifelse(rowSums(cur_data() == 'failed', na.rm = T) <= Category, 'risk', 'failed'))

    #> # A tibble: 2 x 6
    #> # Groups: Number, Category [2]
    #> Number Category Aa Bb Cc Result
    #> <int> <int> <chr> <chr> <chr> <chr>
    #> 1 1 1 passed danger <NA> risk
    #> 2 2 2 failed failed failed failed
    创建于 2021-07-06 由 reprex package (v2.0.0)

    关于r - 带 if else 的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68258751/

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