【问题标题】:How to filter 2 values in R?如何过滤R中的2个值?
【发布时间】:2021-02-27 07:42:03
【问题描述】:

在我的数据集中,有一些空值 (NA) 和“tbd”值。我想删除这 2 个值。这个我试过了,还是不行。

train%>%
  filter(!is.na(User_Score) & User_Score!="tbd")%>%
  summarise(
    Max=max(User_Score),
    Min=min(User_Score),
    Mean=mean(User_Score),
    Median=median(User_Score),
    QUA1=quantile(User_Score,1/4),
    QUA3=quantile(User_Score,3/4),
    IQR=IQR(User_Score)
)

我也试过这个,但还是一样。

train%>%
filter(User_Score != NA & User_Score != "tbd")%>%
summarise(
 Max=max(User_Score),
 Min=min(User_Score),
 Mean=mean(User_Score),
 Median=median(User_Score),
 QUA1=quantile(User_Score,1/4),
 QUA3=quantile(User_Score,3/4),
 IQR=IQR(User_Score)
)

错误说:

argument is not numeric or logical: returning NAargument is not numeric or logical: returning NAError: Problem with `summarise()` input `QUA1`.
x non-numeric argument to binary operator
i Input `QUA1` is `quantile(User_Score, 1/4)`.
Run `rlang::last_error()` to see where the error occurred.

任何想法如何解决它?谢谢之前

【问题讨论】:

    标签: r filter na


    【解决方案1】:

    一列只能包含一种类型的数据。由于数据中的值不是数字 ('tbd'),因此列的类型是字符。删除值后将列转换为数字,然后执行计算。

    library(dplyr)
    
    result <- train%>%
      mutate(User_Score = suppressWarnings(readr::parse_number(User_Score))) %>%
      filter(!is.na(User_Score)) %>%
      summarise(
        Max=max(User_Score),
        Min=min(User_Score),
        Mean=mean(User_Score),
        Median=median(User_Score),
        QUA1=quantile(User_Score,1/4),
        QUA3=quantile(User_Score,3/4),
        IQR=IQR(User_Score)
      )
    

    【讨论】:

    • 感谢您回答我的问题,我已经尝试了您的代码,但现在错误是错误:summarise() 输入QUA1 出现问题。如果 'na.rm' 为 FALSE i 输入 QUA1quantile(User_Score, 1/4),则 x 缺失值和 NaN 是不允许的。运行rlang::last_error() 以查看错误发生的位置。这是什么意思?
    • 一些用于调试问题的示例数据会有所帮助,但我认为这意味着您的数据中还有其他非数字值。尝试更新的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2022-01-03
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多