Я пытаюсь запустить 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