当前位置: 首页 > 知识库问答 >
问题:

使用case_when内部跨突变

艾泰
2023-03-14

我有这样的调查数据。唯一的回答是“na”或“yes”。

    data_in <-read_table2("ID   Q26_1_1 Q26_1_2 Q26_1_3 Q26_1_4
1   NA  NA  NA  Yes
2   NA  NA  NA  NA
3   Yes Yes Yes NA
4   NA  Yes Yes NA
5   NA  NA  NA  NA
")

我不得不对数据应用以下逻辑:

    null
    null
  attempt <- data_in %>% mutate(across(matches("^Q26_1_1$|Q26_1_2$|Q26_1_3$"),.fns=~case_when(Q26_1_4=="Yes"~"No",
                                                                                    TRUE~as.character(.))))
data_out <- read_table2("ID Q26_1_1 Q26_1_2 Q26_1_3 Q26_1_4
1   No  No  No  Yes
2   NA  NA  NA  NA
3   Yes Yes Yes No
4   No  Yes Yes No
5   NA  NA  NA  NA
")

任何建议都非常感谢!我想我可能得用一个循环,但我不知道怎么用。如果我转换为数值并将所有4列求和,我可以使用类似…?

  for (i in data_in){
    if (is.na(i) & data_in[5]>0) {
      i=="No"
    }
  }

共有1个答案

孟彦
2023-03-14

我们可以通过一个helper列来实现这一点。(当然,您可以...在结尾处选择(-any_yes)进行清理。)

data_in %>%
  mutate(
    # Logic 1
    across(matches("^Q26_1_[1-3]$"),
      ~case_when(Q26_1_4 == "Yes" ~ "No", TRUE ~ .)
    ),
    # Logic 2
    any_yes = rowSums(select(., matches("^Q26_1_[1-3]$")) == "Yes", na.rm = TRUE) >= 1,
    across(matches("^Q26_1_[0-9]$"),
      ~ case_when(
        any_yes ~ coalesce(., "No"), # logic 2
        TRUE ~ .                     # logic 3
      )     
    ))
# # A tibble: 5 x 6
#      ID Q26_1_1 Q26_1_2 Q26_1_3 Q26_1_4 any_yes
#   <dbl> <chr>   <chr>   <chr>   <chr>   <lgl>  
# 1     1 No      No      No      Yes     FALSE  
# 2     2 NA      NA      NA      NA      FALSE  
# 3     3 Yes     Yes     Yes     No      TRUE   
# 4     4 No      Yes     Yes     No      TRUE   
# 5     5 NA      NA      NA      NA      FALSE  
 类似资料:
  • 简单地说,我需要将一系列列中的值与一个“基线”列进行比较。当列中的值高于基线时,我需要使用基线值。当列中的值低于或等于基线时,我需要保留该值。下面是一个示例数据集(我的实际数据集要大得多): 我当前的代码使用mutate_at()并且运行良好: 但是当我试图更新它以反映DPLYR1.0中的跨()时,我总是得到一个错误。以下是我的尝试: 你知道我做错了什么吗?case_when()是否适用于交叉?

  • 我觉得应该有一种有效的方法使用和使用来修改新列,但不能使其工作。 我知道在中使用“有点试验性”(就像在本文中一样),但如果有任何建议,我将不胜感激。 不起作用:

  • 我想在中使用,如以下示例所示: 使用调用中的code>也不起作用。 可以替换为第二个call,为简洁起见,我没有将其包括在内。

  • 我有一个很大的数据集,其中有许多带有状态的列。我想做一个新的专栏,有参与者的当前状态。我试图在dplyr中使用case_when,但我不确定如何跨列。数据集的列太多,我无法键入每一列。以下是数据示例: 对于代码,我想要一个新的列,列中说明参与者的最终状态;然而,如果他们的状态曾经是完成的,那么我希望它说完成,不管他们的最终状态是什么。对于该数据,答案如下所示: 还有,如果你能包括对你的代码的任何解

  • 我想知道如何解决case_when中的整数和双向量问题。我需要double vector作为我的numericinput,然而,“case_when”总是给我抛出一个错误,比如“x必须是一个整数向量,而不是一个double vector”。 它只允许我在将“true~0”更改为“true~0L”时输入整数输入 由reprex包(v0.3.0)于2020-08-12创建

  • 给定此网页: 我试图选择div内部的第一个span,然后获取强值。到目前为止,我成功地收集了其他东西,但是我无法完成: