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

在mutate_at内使用case_when

柯昱
2023-03-14

我想在mutate_at中使用case_when,如以下示例所示:

mtcars %>% 
  mutate_at(.vars = vars(vs, am),
            .funs = funs(case_when(
              . %in% c(1,0,9) ~ TRUE
              . %in% c(2,20,200) ~ FALSE
              TRUE ~ as.character(.)
            )))

使用的替代版本= funs()调用中的code>也不起作用。

mtcars %>%
  mutate_at(.vars = vars(vs, am),
            .funs = funs(. = case_when(
              . %in% c(1, 0, 9) ~ TRUE
              . %in% c(2, 20, 200) ~ FALSE
              TRUE ~ as.character(.)
            )))
mtcars %>% 
  mutate_at(.vars = vars(vs, am),
         .funs = funs(ifelse(. %in% c(1, 0, 9), TRUE, FALSE)))

FALSE可以替换为第二个ifelse()call,为简洁起见,我没有将其包括在内。

共有1个答案

鄢朝斑
2023-03-14

我们需要来区分每个案例。此外,如果我们将最后一个选项保留为字符,则真/假也应为字符。不混合类型

mtcars %>%
  mutate_at(.vars = vars(vs, am),
        .funs = funs(. = case_when(
          . %in% c(1, 0, 9) ~ TRUE,
          . %in% c(2, 20, 200) ~ FALSE,
          TRUE ~ TRUE
        )))

如果我们需要创建字符类,并且如果两种情况中的任何一种不正确,则还需要将列作为字符返回,也许

mtcars %>%
 mutate_at(.vars = vars(vs, am),
        .funs = funs(. = case_when(
          . %in% c(1, 0, 9) ~ "Yes",
          . %in% c(2, 20, 200) ~ "No",
          TRUE ~ as.character(.)
        ))) 
 类似资料:
  • 考虑这个简单的例子: 在这里,我想将函数应用于包含的所有列,但我希望这些新列称为对应列的。 我知道我能做到 但我需要的是这个 有没有一种解决方案不需要存储中间数据,并合并回原始数据帧?

  • 问题内容: 我有一个包含面板数据的数据框,比方说这是100个不同对象的时间序列: 我想添加一个新列,该列将为每个对象存储先前的列: 我可以通过某种方式使用.shift()和.groupby()吗? 问题答案: 是的,只需执行以下操作: 对于此示例数据框: 结果将是:

  • 问题内容: 我看不到以下代码如何产生看起来违反对象锁定义的输出。当然应该只允许一个线程打印“ acquired lock”消息,但两者都可以吗? 问题答案: 这是因为对的调用释放了锁定,从而允许第二个线程进入同步块。从javadoc中提取 该线程释放此监视器的所有权,并等待直到另一个线程通过调用notify方法或notifyAll方法通知等待在该对象监视器上等待的线程唤醒。然后,线程等待,直到它可

  • 问题内容: 当我想在Python中执行命令并且需要使用引号时,我不知道如何在不关闭字符串的情况下执行该命令。 例如: 但是,当我尝试执行上面的操作时,我最终关闭了字符串,并且无法将需要的单词放在引号之间。 我怎样才能做到这一点? 问题答案: 您可以通过以下三种方式之一进行操作: 一起使用单引号和双引号: 转义字符串中的双引号: 使用三引号引起来的字符串:

  • 问题内容: 我想遍历“节日” 的 ArrayList 并使用 get 方法获取其信息,并打印出其所有值。由于某些原因,当我使用此代码时,它将始终选择第“ 0”个值,而不增加循环。 如果我将值硬编码为“ get(1)”,它将获得正确的值,因此我的问题显然是语法。 问题答案: 造成具体问题的原因是,您将灰心丧气的旧式_脚本_和其后继EL混合在一起。它们不共享相同的变量范围。在中不可用 _scriptl

  • 问题内容: 我正在阅读Robert Love的“ Linux内核开发”,并且遇到了以下段落: 无需(轻松)使用浮点数 当用户空间进程使用浮点指令时,内核将管理从整数到浮点模式的转换。内核使用浮点指令时必须执行的操作因体系结构而异,但是内核通常会捕获陷阱,然后启动从整数模式到浮点模式的转换。 与用户空间不同,内核不具有对浮点​​的无缝支持的奢侈,因为它无法轻易地陷入陷阱。在内核内部使用浮点数需要手动