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

避免与DPLYR::CASE_WHEN发生类型冲突

蒙麒
2023-03-14

我试图在dplyr::mutate中使用dplyr::case_when来创建一个新变量,在这个变量中,我将一些值设置为missing并同时重新编码其他值。

但是,如果尝试将值设置为NA,则会出现一个错误,说明我们无法创建变量new,因为NA是逻辑的:

mutate_impl(.data,dots)中出错:
计算错误:类型必须是double,不是逻辑。

在数据帧的非逻辑向量中,是否有方法使用此设置值na

library(dplyr)    

# Create data
df <- data.frame(old = 1:3)

# Create new variable
df <- df %>% dplyr::mutate(new = dplyr::case_when(old == 1 ~ 5,
                                                  old == 2 ~ NA,
                                                  TRUE ~ old))

# Desired output
c(5, NA, 3)

共有1个答案

融渊
2023-03-14

?case_when中所述:

所有RHS必须计算为相同类型的向量。

你实际上有两种可能:

df <- df %>% mutate(new = case_when(old == 1 ~ 5,
                                    old == 2 ~ NA_real_,
                                    TRUE ~ as.numeric(old)))
str(df)
# 'data.frame': 3 obs. of  2 variables:
# $ old: int  1 2 3
# $ new: num  5 NA 3
df <- df %>% mutate(new = case_when(old == 1 ~ 5L,
                                    old == 2 ~ NA_integer_,
                                    TRUE ~ old))
str(df)
# 'data.frame': 3 obs. of  2 variables:
# $ old: int  1 2 3
# $ new: int  5 NA 3
 类似资料:
  • 简单地说,我需要将一系列列中的值与一个“基线”列进行比较。当列中的值高于基线时,我需要使用基线值。当列中的值低于或等于基线时,我需要保留该值。下面是一个示例数据集(我的实际数据集要大得多): 我当前的代码使用mutate_at()并且运行良好: 但是当我试图更新它以反映DPLYR1.0中的跨()时,我总是得到一个错误。以下是我的尝试: 你知道我做错了什么吗?case_when()是否适用于交叉?

  • 问题内容: 当Proguard重命名/重新打包类时,似乎并没有尝试避免与库JAR中的类命名冲突。这是正确的,还是我配置不正确? 我混淆了使用最新的Google AdMob SDK的Android应用程序。以前,我使用旧的AdMob SDK没问题。新的SDK JAR文件包含一些已被混淆的类。这些类之一在默认/未命名包中。当我混淆我的应用程序时,尽管将AdMob JAR作为库JAR读取(尽管它应该引起

  • 问题内容: 有没有一种方法可以避免类型擦除并获得对类型参数的访问? 我需要了解并使用它来做事。是否可以,如果可以,如何在 不 将类传入构造函数或参数之外的任何地方的 情况下 完成操作? 编辑: 这个问题的主要目的是找出是否有 任何实用的方法 来消除类型擦除。 问题答案: 实际上, 没有 类型擦除的实用方法,因为您不能要求运行时无法访问的内容。当然,假设您同意为实现接口的每个枚举子类化通用类是一个实

  • 问题内容: 最近,我被分配创建拍卖系统的任务。在我的工作中,我遇到了无数次由于列名不明确而导致包含联接的SQL查询无法执行的情况。考虑以下(简化的)拍卖表结构: 表: (创建拍卖的用户的ID) 表: (添加项目的用户的ID) (有该物品的拍卖的ID) (初始价格) 表: 表: (出价的用户的ID) (已提高价格的项目) (优惠价格) 如您所见,有许多列具有冲突的名称。连接这些表需要采取一些措施来消

  • 我想更新表中几行的主键。如果所有行都已更新,则键将再次是唯一的,但第一行的更新会导致与第二行的键发生临时冲突。有没有优雅的方法来解决这个问题? 例子: 错误:重复的键值违反了唯一约束“pk_erichtest”

  • 考虑这个例子,其中主应用程序是两个模块的消费者:一个提供电子邮件服务,另一个提供日志服务。 app/email/email.service.ts app/email/email.module.ts providers: [ EmailService ], }) export class EmailModule { } 电子邮件服务api需要一些由字符串api-config标识的配置设置,由DI