【问题标题】:Filter + Mean Calculation: Argument is not numeric or logical: returning NA过滤器 + 平均计算:参数不是数字或逻辑:返回 NA
【发布时间】:2020-10-30 11:26:20
【问题描述】:

我尝试为我的数据框 country_hsproduct4digit_year 的过滤子集计算变量 pci 的平均值。我正在过滤产品代码“3510”。尽管 pci 是数字并且排除了 NA,但在使用以下代码时,我仍然会收到上述错误消息:filter(country_hsproduct4digit_year, hs_product_code=="3510")%>%mean(country_hsproduct4digit_year$pci, na.rm=TRUE) 你能帮我解决这个问题吗?我还尝试了带有 [ 括号的 mean 命令,并且我还检查了 hs_product_code 是一个字符变量。

【问题讨论】:

  • 我想说问题在于您如何使用%>% 运算符。在您的代码中,您将过滤操作的输出作为输入传递给 mean 函数 - 这是整个数据帧。但是,在mean 中,您再次通过提供“完全限定”名称dataframename$columnname 来引用数据框的列。这是一种“冗余”。因此,正如 Ronak 所指出的,请确保您使用 pull 函数拉出相应的 cloumn。

标签: r dplyr


【解决方案1】:

当您使用 mean(country_hsproduct4digit_year$pci, na.rm=TRUE) 时,您仍然会从完整的数据框中获取 mean。试试看:

library(dplyr)

result <- country_hsproduct4digit_year %>%
  filter(hs_product_code=="3510") %>%
  pull(pci) %>%
  mean(na.rm = TRUE)

【讨论】:

  • 非常感谢您这么快就解决了我的问题。周末愉快!
【解决方案2】:

我们可以使用data.table

library(data.table)
setDT(country_hsproduct4digit_year)[hs_product_code == '3510"][, mean(pci, na.rm = TRUE)]

【讨论】:

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