【问题标题】:Why does mutate() give me an error that I should use integer vector while using integer vector?为什么 mutate() 给我一个错误,我应该在使用整数向量时使用整数向量?
【发布时间】:2021-07-30 06:47:23
【问题描述】:
new_data<-new_data%>%
  mutate(dd=case_when(
    edu_yr402==95 ~ NA_integer_,
    edu_yr402==93|edu_yr402==94 ~ 1, 
    TRUE~edu_yr402))

我发誓 edu_yr402 是一个整数向量。 我用 > class(new_data$edu_yr402) 检查了它 [1] “整数” 但是,错误信息如下:

错误:mutate() 输入 dd 有问题。 x 必须是整数向量,而不是双精度向量。 i 输入ddcase_when(...)

一位评论者说 dd 成为逻辑向量,因为我将 NA 放在第一个字符串中。因此,我尝试了

new_data<-new_data%>%
  mutate(dd=case_when(
    edu_yr402==93|edu_yr402==94 ~ 1, 
    TRUE~edu_yr402,
    edu_yr402==95 ~ NA_integer_))

但它给了我错误...

错误:mutate() 输入 dd 有问题。 x 必须是双精度向量,而不是整数向量。 i 输入ddcase_when(...)

【问题讨论】:

  • 问题是您的列 dd 被视为logical,因为case_when 中的第一个参数会引发NA。因此,它期望所有下一个可能的值都是合乎逻辑的。
  • 感谢 cmets。因此,我尝试了 new_data% mutate(dd=case_when(edu_yr402==93|edu_yr402==94 ~ 1, TRUE~edu_yr402, edu_yr402==95 ~ NA_integer_)),但它给了我另一个错误.. :错误:mutate() 输入 dd 有问题。 x 必须是双精度向量,而不是整数向量。 i 输入ddcase_when(...)

标签: r function dplyr


【解决方案1】:

克服这种冲突的一种可能性:

在您的控制台中输入?case_when,然后查看帮助文件:

这里1L 使1 成为整数。那么你可以使用NA_integer_,它是NA的整数类型

new_data<-new_data%>%
  mutate(dd=case_when(
    edu_yr402==95 ~ NA_integer_,
    edu_yr402==93|edu_yr402==94 ~ 1L, 
    TRUE~as.integer(edu_yr402)))

这里是as.numeric版本

new_data<-new_data%>%
  mutate(dd=case_when(
    edu_yr402==95 ~ NA_real_,
    edu_yr402==93|edu_yr402==94 ~ 1, 
    TRUE~as.numeric(edu_yr402)))

【讨论】:

  • 感谢您的 cmets !有什么理由不能使用整数类型吗? edu_yr402 是一个整数向量,所以我不知道为什么我应该使用 NA_real_,而不是 NA_integer_。
  • 您可以通过将L 添加到~1 来使用integer。我会更新的。
  • 非常感谢您的热情回复和cmets!对我帮助很大
【解决方案2】:

正如我所提到的,问题是您在类型严格的函数 (case_when) 中有不同类型的输出。所以它会给你一个错误。你可以这样做来解决它:

new_data%>%
  mutate(dd=case_when(
    edu_yr402==95 ~ as.double(NA),
    edu_yr402==93|edu_yr402==94 ~ 1, 
    TRUE~edu_yr402))

如果你还是想要整数:

new_data%>%
  mutate(dd=case_when(
    edu_yr402==95 ~ NA_integer_,
    edu_yr402==93|edu_yr402==94 ~ 1L, 
    TRUE~as.integer(edu_yr402)))

编辑:使用 1L 而不是 TarJae 建议的 as.integer(1)

【讨论】:

  • 感谢您的 cmets!但它会产生错误.. case_when() 是类型严格的函数,但是,edu_yr402 是整数,所以我真的很好奇为什么我们应该使用双精度..
  • 如果没有edu_yr402 的数据样本就无法判断。如果您想将数据保留为整数,请查看编辑
  • 非常感谢您的热情回复和cmets!真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2019-09-09
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多