#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()