【问题标题】:sum(births) : invalid 'type' (character) of argumentsum(births) : 参数的无效“类型”(字符)
【发布时间】:2020-08-30 11:06:55
【问题描述】:

大家好, 我在 RStudio 中使用示例数据。我使用了下面的代码:

 njnew <- nj %>%
     group_by(NAME_2) %>%
   summarise(Num.totalbirths=sum(births),
             Num.totalvulnerable=sum(vulnerable)) %>%
    mutate(percent.potentailcase=potentialcase/Num.totalpotentialcase,
           percent.vulerablecase=vulnerable/Num.vulnerablecase)

我跑完后得到:

Error in sum(births) : invalid 'type' (character) of argument

我的数据集是一个 csv,但我手动添加/填充了 2 个额外的列(出生、易受攻击)。

能否请您告诉我这个错误是怎么发生的?

【问题讨论】:

  • 请提供您的数据集示例。

标签: r dplyr


【解决方案1】:

从错误信息来看,births 的类型似乎是 character。但是,您只能计算数字、复数或逻辑向量的sum。当您在读取 ​​csv 后手动添加列时,可能会发生这种情况。

您可以使用class(nj$births) 仔细检查变量的类型,这可能会返回character。尝试使用as.numeric() 转换您的变量。您可能需要对手动添加的其他变量(例如 vulnerable)重复该过程,例如:

nj <- nj %>% 
  mutate(births = as.numeric(births),
         vulnerable = as.numeric(vulnerable))

那么你的代码应该可以正常工作了。

【讨论】:

  • 如果强制转换为数字,不包含数字的字符元素是否总是不可避免地评估为 NA?例如,v &lt;- c(1.2, 3.1, 4.555, "ABC") &gt; as.numeric(v) [1] 1.200 3.100 4.555 NA
  • @ChrisRuehlemann 是的,但我认为births 实际上是一个(专门)数字向量,但(意外地)存储为一个字符,如:x &lt;- c("1", "2", "3")。这是一个字符,但是当调用as.numeric(x) 时,一切都被转换得很好。如果births 中确实存在非数字值,那么首先尝试计算它的sum 是没有任何意义的。虽然这是只有 OP 才能澄清的事情。
猜你喜欢
  • 2016-08-07
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2021-05-04
  • 2017-01-24
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多