【问题标题】:Missing values don't let me calculate trends in the modifiedmk package in R缺失值不允许我计算 R 中 modifiedmk 包中的趋势
【发布时间】:2021-09-16 10:27:27
【问题描述】:

我正在尝试使用 bcpw 函数 计算 MannKendall 趋势检验。由于我的缺失值,我无法获得我的结果,所以我使用 remove_missing 函数 来消除非有限数并删除带有 NA 的列;然而,bcpw 函数并没有运行。要设置重新创建问题,我将使用以下示例:

df <- data.frame(
      stringsAsFactors = FALSE,
                      Season = c("Summer 1996",
                                 "Winter 1996-1997","Summer 1997","Winter 1997-1998",
                                 "Summer 1998","Winter 1998-1999","Summer 1999",
                                 "Winter 1999-2000","Summer 2000",
                                 "Winter 2000-2001","Summer 2001","Winter 2001-2002"),
                     Germany = c(NA,33.8,65.5,
                                 26.4,30.9,39.8,23.7,37.7,35.7,39.5,37.5,29.3),
                  Luxembourg = c(NA,NA,NA,NA,NA,
                                 NA,NA,16.5,33.3,35.4,27,25.5),
                      France = c(26.7,23.7,42.3,
                                 32.9,27.9,19.1,38.7,15,60.2,35.4,26.7,23.7),
                       Spain = c(NA,NA,NA,NA,NA,
                                 NA,NA,16.73,41.81,31.91,27.25,29.75))

remove_missing(df, na.rm = TRUE, vars = names(df), name = "", finite = TRUE)

library(modifiedmk)
df_results <-lapply(df[-1], bcpw)

我收到以下错误

任何帮助将不胜感激

【问题讨论】:

  • remove_missing 函数属于哪个包?
  • 您需要将remove_missing 函数的输出分配给某个变量,然后在lapply 中使用它。比如:df &lt;- remove_missing(df)
  • 当我分配输出时它消除了我的所有行,包括那些确实有数据的行。 remove_missing 来自 ggplot2 包。

标签: r trend


【解决方案1】:

看来问题是由finite 参数引起的。当它遇到一个字符列时,它会丢弃所有内容。在 tidyverse repo 上报告为issue

即使您有NaN,该函数也可以在没有参数的情况下正常工作,即finite=FALSE

df <- data.frame(
  stringsAsFactors = FALSE,
  Season = c("Summer 1996",
             "Winter 1996-1997","Summer 1997","Winter 1997-1998",
             "Summer 1998","Winter 1998-1999","Summer 1999",
             "Winter 1999-2000","Summer 2000",
             "Winter 2000-2001","Summer 2001","Winter 2001-2002"),
  Germany = c(NA,33.8,65.5,
              26.4,30.9,39.8,23.7,37.7,35.7,39.5,37.5,29.3),
  Luxembourg = c(NA,NA,NA,NA,NA,
                 NA,NA,16.5,33.3,35.4,27,25.5),
  France = c(26.7,23.7,42.3,
             32.9,27.9,19.1,38.7,15,60.2,35.4,26.7,23.7),
  Spain = c(NA,NA,NA,NA,NA,
            NA,NA,16.73,41.81,31.91,27.25,29.75))

df2 = ggplot2::remove_missing(df)
#> Warning: Removed 7 rows containing missing values.

df3 = ggplot2::remove_missing(df, na.rm = TRUE, vars=names(df), name = "", finite=TRUE)

df2
#>              Season Germany Luxembourg France Spain
#> 8  Winter 1999-2000    37.7       16.5   15.0 16.73
#> 9       Summer 2000    35.7       33.3   60.2 41.81
#> 10 Winter 2000-2001    39.5       35.4   35.4 31.91
#> 11      Summer 2001    37.5       27.0   26.7 27.25
#> 12 Winter 2001-2002    29.3       25.5   23.7 29.75

df3
#> [1] Season     Germany    Luxembourg France     Spain     
#> <0 rows> (or 0-length row.names)

reprex package (v2.0.0) 于 2021-07-07 创建

您还可以尝试使用 base R 中的函数 complete.cases,它还可以处理 NANaN

df <- data.frame(
  stringsAsFactors = T,
  Season = c("Summer 1996",
             "Winter 1996-1997","Summer 1997","Winter 1997-1998",
             "Summer 1998","Winter 1998-1999","Summer 1999",
             "Winter 1999-2000","Summer 2000",
             "Winter 2000-2001","Summer 2001","Winter 2001-2002"),
  Germany = c(NA,33.8,65.5,
              26.4,30.9,39.8,23.7,37.7,35.7,39.5,37.5,29.3),
  Luxembourg = c(NaN,NaN,NA,NA,NA,
                 NA,NA,16.5,33.3,35.4,27,25.5),
  France = c(26.7,23.7,42.3,
             32.9,27.9,19.1,38.7,15,60.2,35.4,26.7,23.7),
  Spain = c(NA,NA,NA,NA,NA,
            NA,NA,16.73,41.81,31.91,27.25,29.75))


df[complete.cases(df), ]
#>              Season Germany Luxembourg France Spain
#> 8  Winter 1999-2000    37.7       16.5   15.0 16.73
#> 9       Summer 2000    35.7       33.3   60.2 41.81
#> 10 Winter 2000-2001    39.5       35.4   35.4 31.91
#> 11      Summer 2001    37.5       27.0   26.7 27.25
#> 12 Winter 2001-2002    29.3       25.5   23.7 29.75

reprex package (v2.0.0) 于 2021-07-07 创建

Tidyverse 还有一个功能:

df %>% tidyr::drop_na()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    相关资源
    最近更新 更多