Удаление одного элемента данных (значения) за раз из переменной и выполнение функции в R - PullRequest
1 голос
/ 24 января 2020

Я пытаюсь написать код на R, который позволяет мне:

  1. Удалить первый элемент данных (значение) из переменной (столбца) в большем фрейме данных.

  2. Запуск функции для полного фрейма данных (с удаленным элементом данных из шага 1).

  3. Повторите этот процесс для остальных элементов данных в столбце.

Я попробовал следующий код и запустил его без ошибок. Однако из результатов видно, что элементы данных не удаляются последовательно должным образом.

Для контекста мой фрейм данных (df) составляет 50x18, а функция, которую я пытаюсь запустить с шага 2, функция множественного вменения. Вот мой код:

procedure <- function(x) {
  x <- NA
  mice(df, m = 5, maxit = 5, method = "norm", pred = pred_matrix, seed = 2019)
}

results <- lapply(df$variable, procedure)

При желании этот код создает список с 50 наборами выходных данных. Тем не менее, кажется, что выполнить процедуру 50 раз на одном и том же кадре данных. Таким образом, мой вопрос: Почему мой код не проходит по каждому элементу в переменной данных и не удаляет его перед запуском процедуры? Я не пытаюсь сжать фрейм данных (удалить строку). Вместо этого для каждого значения (x) в переменной я хочу сделать значение «NA» (go отсутствует) и затем выполнить процедуру.

Заранее спасибо!

1 Ответ

1 голос
/ 24 января 2020

Если предположить, что элементы df$variable уникальны, должны работать следующие элементы:

procedure <- function(x) {
  df1 <- df
  df1[df1$variable == x,"variable"] <- NA
  mice(df1, m = 5, maxit = 5, method = "norm", pred = pred_matrix, seed = 2019)
}

results <- lapply(df$variable, procedure)

Если они не уникальны, вы можете l oop по индексам следующим образом:

procedure <- function(x) {
  df1 <- df
  df1[x,"variable"] <- NA
  mice(df1, m = 5, maxit = 5, method = "norm", pred = pred_matrix, seed = 2019)
}

results <- lapply(1:length(df$variable), procedure)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...