【问题标题】:Argument is not numeric or logical: returning NAargument is not numeric or logical in R参数不是数字或逻辑:返回 NAargument 在 R 中不是数字或逻辑
【发布时间】:2021-01-29 07:07:34
【问题描述】:

所以我在下面使用此代码。 maindata 是玩家、他们的家乡和每场比赛得分的表格。我正在尝试制作一个新表格,其中一列中包含城市,第二列中包含每场比赛的平均分(如表 A 所示)。我不断得到一张表格,其中列出了城市,AvgPoints 的行都显示了 NA。我收到此错误“参数不是数字或逻辑:返回 NAargument 不是数字或逻辑”,并且它会重复数百次。主要数据有 3561 个观测值。

point <- maindata%>%
  group_by(City, State) %>%
    summarise(AvgPoints = mean(PTS.1, na.rm = TRUE))

表 A

   City            AvgPoints
----------------------------
New York City        19.9
Los Angeles          22.1
Boston               13.3

【问题讨论】:

  • 请查看str(maindata) 了解列的类型。或者特别是class(maindata$PTS.1) 可能是“PTS.1”不是数字
  • @akrun 它说它们是因素。我不确定为什么。
  • 如果有一些元素是非数字的,即它将读取为character。在新版本的 R 中,它应该是 character 类而不是 factor,因为默认情况下是 stringsAsFactors = FALSE。我的观点是,如果您的列有c(1.5, 1.2, 'a1'),它不是数字列,因为其中一个元素不是数字。您可以使用maindata %&gt;% mutate(PTS.1 = as.numeric(as.character(PTS.1))) 将因子转换为数字,然后进行分组。将非数字转换为 NA 时会有一些友好的警告
  • @akrun 太好了,我明白你的意思,我已经应用了这个功能并让它工作了。谢谢!

标签: r group-by summarize


【解决方案1】:

如果不是数字,我们先将列转换为numeric,然后进行分组操作

library(dplyr)
maindata %>%
      mutate(PTS.1 = as.numeric(as.character(PTS.1))) %>%
      group_by(City, State) %>%
      summarise(AvgPoints = mean(PTS.1, na.rm = TRUE), .groups = 'drop')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多