Как исключить из матрицы данных около 1000 переменных переменные/столбцы с дисперсией, равные 0 (ноль) (т. Е. Все случаи/наблюдения в переменной/столбце имеют одинаковое значение)? Я могу представить вычисления дисперсий для каждого столбца, а затем вручную записать числа столбцов, которые будут исключены (или включены, поскольку это, как представляется, легче сделать в R). Но обязательно есть более элегантное и экономящее время решение в R. Спасибо заранее!Исключить столбцы без дисперсии
ответ
caret
пакет предоставляет некоторые полезные функции, чтобы сделать это: http://topepo.github.io/caret/preprocess.html#nzv:
nearZeroVar: Идентификация вблизи нулевой дисперсии предикторов
nearZeroVar диагнозы предсказателей, которые имеют одно единственное значение (т.е. равны нулю дисперсии предсказатели) или которые имеют две следующие характеристики: у них очень мало уникальных значений относительно количества выборок, а отношение частоты наиболее распространенного значения к частоте второго наиболее распространенного значения велико. checkConditionalX рассматривает распределение столбцов x, обусловленных уровнями y, и идентифицирует столбцы x, которые являются разреженными внутри групп y.
Также примечание: var()
является медленной функцией. Мы можем использовать более эффективные решения. Сравнение некоторых из них:
dataset <- data.frame(replicate(10, runif(100)),
replicate(10, rep(0, 100)))
microbenchmark::microbenchmark(
var = Filter(var, dataset),
var2 = Filter(function(x) sum((x - sum(x)/length(x))^2), dataset),
range = Filter(function(x) diff(range(x)), dataset),
range2 = Filter(function(x) max(x) - min(x), dataset))
#> Unit: microseconds
#> expr min lq mean median uq max neval cld
#> var 334.058 359.1545 419.89933 418.8425 439.5935 1707.222 100 c
#> var2 74.457 78.8310 87.47988 87.4805 94.1590 127.932 100 a
#> range 219.973 233.8155 256.30933 260.9380 272.0370 306.272 100 b
#> range2 72.040 75.7300 84.97079 85.1985 90.8195 108.869 100 a
Также мы можем использовать length(qunique(x))
за факторы или целые числа.
О Filter
. Выражение
Filter(function(x) max(x) - min(x), dataset)
похож на
dataset[vapply(dataset, function(x) as.logical(max(x) - min(x)), logical(1))]
, но она работает немного медленнее.
Обратите внимание, что nearZeroVar()
является более сложным и гибким решением.
Мы можем использовать Filter
Filter(var, df1)
- 1. Исключить столбцы с Null
- 2. Исключить # ed столбцы
- 3. Исключить столбцы из модели
- 4. мутировать и rowSums исключить столбцы
- 5. Алгоритм равномерного распределения лотереи «призы»/без дисперсии
- 6. исключить столбцы при использовании select *
- 7. Как исключить скрытую строку/столбцы
- 8. Исключить определенные столбцы из матрицы
- 9. Исключить столбцы из панд где()
- 10. Исключить столбцы jtable от сортировки
- 11. Исключить столбцы в jsPDF Автотестирование
- 12. Нахождение дисперсии через столбцы для одной строки в PostGreSQL
- 13. Исключить столбцы при обновлении Linq для объекта
- 14. плотность участки для дисперсии Коэффициента
- 15. Как исключить столбцы из навигации на вкладке?
- 16. Linq Исключить столбцы в дочерних объектах
- 17. Исключить столбцы, которые состоят только из NA's
- 18. Исключить столбцы из выделения в Excel/VBA
- 19. SQL сводной таблица Dynamic - исключить неиспользуемые столбцы
- 20. Как исключить столбцы с высокой корреляцией?
- 21. Как исключить столбцы из таблицы данных?
- 22. Исключить столбцы из genfromtxt с numpy
- 23. Как исключить строки/столбцы из данных numpy.ndarray
- 24. Исключить данные столбцы при сортировке таблицы python
- 25. Исключить столбцы в именах вызывающих столбцов R
- 26. Как исключить столбцы в hibernate join
- 27. C3.js исключить столбцы из CSV
- 28. Исключить/скрыть некоторые столбцы при экспорте datatable
- 29. Диаграмма дисперсии и доверительный интервал для дисперсии с ggplot
- 30. Интервал вокруг компонентов дисперсии
Цель состоит в том, чтобы устранить переменные, без отклонения от PCA. – AussieAndy
'sum ((x - sum (x)/length (x))^2)' - самый быстрый способ вычисления переменной отклонения. Если отклонение равно 0, чем дисперсия. –
'diff (range (x))' быстрее, чем 'length (unique (x))', но медленнее, чем 'sum ((x - sum (x)/length (x))^2)' или 'max (x) - min (x) '. –