Пропущенные значения не позволяют мне рассчитать тенденции в пакете modifiedmk в R

#r #trend

Вопрос:

Я пытаюсь вычислить тест тренда Маннкендалла с помощью функции bcpw. Из-за пропущенных значений я не могу получить свои результаты, поэтому я использовал функцию 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)
 

И я получаю следующую ошибку
ошибка

Любая помощь будет признательна

Комментарии:

1. remove_missing функция является частью какого пакета?

2. вам нужно назначить выход remove_missing функции некоторой переменной, а затем использовать ее lapply . Что-то вроде: df <- remove_missing(df)

3. когда я назначаю вывод, он удаляет все мои строки, включая те, в которых есть данные. remove_missing это из ggplot2 пакета.

Ответ №1:

Похоже, что проблема вызвана finite аргументом. Когда он сталкивается со столбцом символов, он отбрасывает все. Об этом сообщается как о проблеме с репо tidyverse.

Функция отлично работает без аргумента , т. Е. finite=FALSE Даже если у вас есть NaN .

 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)
 

Создано 2021-07-07 пакетом reprex (v2.0.0)

Вы также можете попробовать функцию complete.cases из базы R, которая также обрабатывает оба NA и NaN .

 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
 

Создано 2021-07-07 пакетом reprex (v2.0.0)

У Tidyverse также есть функция:

 df %>% tidyr::drop_na()