Результат `na.omit ()` не ведет себя так же, как предварительно очищенный набор данных при использовании `lapply ()` - PullRequest
0 голосов
/ 21 мая 2019

Я пытаюсь запустить wilcox.test() на нескольких подмножествах данных, используя функцию lapply().Данные сгруппированы в первом столбце моего фрейма данных по текстовому идентификатору (название сайта), и есть два других столбца для данных за 2013 и 2017 годы, в которых я выполняю тест Уилкокса.Около 10% моих 500 строк данных имеют пропущенное значение в столбцах 2013 или 2017 (или в обоих).

Когда я пытаюсь запустить функцию lapply(), показанную ниже, я получаю сообщение об ошибке:

df<-read.csv("myfile.csv",header=T)

split.df<-split(df,df$Site)
lapply(split.df, function(g) wilcox.test(g$2013, g$2017, paired=T)

Ошибка в wilcox.test.default (g $ 2013, g $ 2017,Парные = T): недостаточно (конечных) наблюдений 'x' `

Я попытался очистить фрейм данных н / д с использованием функций na.omit() и na.exclude():

df<-na.omit(df)

ИЛИ

df<-na.exclude(df)

При выполнении того же split, за которым следует lapply, как написано выше, после пропуска или исключения NA, я получаю ту же ошибку.

Если очистить данные в Excel перед импортом, удалив все строки с пропущенными значениями в строке 2013 или 2017 гг., А затем импортировать данные, функция lapply() будет работать правильно.

Я использую RStudio, и я смотрел на фрейм данных на каждом шаге.После импорта необработанных данных у меня есть 500 наблюдений.После использования na.omit() или na.exclude() в кадре данных по-прежнему отображается 500 строк, но строки, для которых были заданы значения NA, «маскируются», так как номер строки пропускается.Например, если в строках 5, 8 и 10 содержатся NA, в очищенном кадре данных будут отображаться строки 1,2,3,4,6,9,11 .... и т. Д.Если я напрямую сравниваю строку 12 очищенного набора данных и набора необработанных данных, они будут иметь одинаковые значения (поэтому я считаю, что na.omit() и na.exclude() просто скрывают или маскируют строки с помощью NA).

Когда я импортирую фрейм данных после его очистки в Excel, я вижу, что в действительности всего 450 строк.Я думаю, что ошибка функции lapply() может быть связана с тем, что na.omit() и na.exclude() фактически не удаляют эти строки из кадра данных.

Есть ли функция, которая действительно удаляет строки с символами NA, или я здесь совершенно не на том пути?Любые советы приветствуются.

Редактировать:

Пример данных здесь: https://1drv.ms/u/s!Av1rL-HNLDNsgZ84P86y953iCXxnjA

Пример кода, который дает вышеупомянутую ошибку:

names(df)
df.split<-split(df, df$Site)
df.split
lapply(df.split, function(g) wilcox.test(g$y2013, g$y2017, paired=T))

Если связанный csv-файл очищается вручную путем удаления строк с пропущенными значениями, приведенный выше код работает правильно со следующим выводом:

$ D03

Wilcoxon signed rank test

data: g $ y2013 иg $ y2017 V = 220, p-значение = 0,01681 альтернативная гипотеза: истинное смещение местоположения не равно 0

$ D04

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V= 158, значение p = 0,0008411 альтернативная гипотеза: истинное смещение местоположения не равно 0

$ D08

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V = 96, p-значение = 1.146e-05 альтернативная гипотеза: истинное смещение местоположения не равно 0

$ D09

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V = 44, p-значение = 0,0002089 альтернативная гипотеза: истинное смещение местоположения не равно 0

$ D11

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V = 153, p-значение = 0.0006289 альтернативная гипотеза: истинное смещение местоположения не равно 0

$ Platform1

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V = 285, p-значение = 0,05974 альтернативная гипотеза:истинное смещение местоположения не равно 0

$ Platform2

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V = 43, p-значение = 0,002726 альтернативная гипотеза: истинное смещение местоположения равноне равно 0

$ Platform3

Wilcoxon signed rank test

данные: g $ y2013 и g $ y2017 V = 127, p-значение = 0,002817 альтернативная гипотеза: истинное смещение местоположения не равно 0

1 Ответ

2 голосов
/ 21 мая 2019

Используйте complete.cases для удаления NA значений и затем примените тест

df1 <- df[complete.cases(df), ]
df.split <- split(df1, df1$Site)

lapply(df.split, function(g) wilcox.test(g$y2013, g$y2017, paired=TRUE))

#$D03

#   Wilcoxon signed rank test

#data:  g$y2013 and g$y2017
#V = 220, p-value = 0.01681
#alternative hypothesis: true location shift is not equal to 0


#$D04

#   Wilcoxon signed rank test

#data:  g$y2013 and g$y2017
#V = 158, p-value = 0.0008411
#alternative hypothesis: true location shift is not equal to 0

#...
#...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...