Матрица поднабора, включая NA

У меня матрица вот так:

     a    b    c    d
[1]  as   ac   ad   ae
[2]  bd   bf   bg   bh
[3]  NA   cf   cd   ce
[4]  NA   NA   dr   dy
[5]  NA   NA   NA   ej 

Я хотел бы разбить каждый столбец отдельно на матрицу или список, основанный на 50% наблюдений, поэтому я хотел бы, чтобы мой вывод выглядел так:

     a    b    c    d
[1]  as   ac   ad   ae
[2]  NA   bf   bg   bh
[3]  NA   NA   NA   ce

До сих пор я использовал для кодирования отдельных столбцов без NA.

mv.s <- subset(mv, mv <= quantile(mv, 0.5))    

теперь я думал об использовании чего-то вроде

for (i in 1:15) {
mv.s[[i]] <- subset(mv[[i]], mv <= quantile(mv, 0.5))
}

Однако, когда я делаю это, я получаю предупреждение:

Ошибка в quantile.default(mv, 0.5): пропущенные значения и NaN недопустимы, если "na.rm" равен FALSE

когда я пытаюсь этот код:

for (i in 1:15) {
mv.s[[i]] <- subset(mv[[i]], mv <= quantile(mv[[i]], 0.5))
}

я получил

Ошибка в (1 - h) * qs[i]: нечисловой аргумент для бинарного оператора

Любая помощь будет оценена.

2 ответа

Решение

Без использования какого-либо пакета и только функции apply вы можете сделать следующее.

apply(mat, 2, FUN = function(x){ sample(x, ceiling(length(x)/2), replace = FALSE)})

Это берет случайную выборку ваших наблюдений за столбцом без замены и предполагает, что ваша матрица называется mat,

Если вы используете set.seed(1) чтобы сделать случайную выборку воспроизводимой, результат будет выглядеть следующим образом.

     [,1] [,2] [,3] [,4]
[1,] "bd" NA   NA   "ae"
[2,] NA   "ac" "cd" "ej"
[3,] NA   "cf" "bg" "dy"

sample_frac() функция в dplyr Похоже, это соответствует вашим потребностям.

install.packages('dplyr')
library(dplyr)

subset_matrix <- apply(mv, 2, function(x) sample_frac(x, .5, replace = F))

Вы можете указать, какая часть строк вы хотите выбрать в sample_frac(), С помощью apply() по столбцам даст вам ту часть наблюдений для каждого столбца.

Я не проверял это, потому что вы не предоставили образец своих данных, но похоже, что он должен работать.

Другие вопросы по тегам