Цикл for для замены пропущенных падежей условно на следующую переменную (приветствуется решение tidyverse) - PullRequest
0 голосов
/ 09 октября 2018

Как всегда, я здесь после проверки тонны информации о кодировании.Позвольте мне объяснить ситуацию, с которой я сейчас сталкиваюсь: я работаю в психологическом масштабе, направленном на доступ к развитию ребенка.В этой шкале у нас нет возможности пропустить дела , только 0, 1 или 2. К сожалению, некоторые закодировали некоторые значения как пропущенные, и я пытаюсь это исправить.

Всепропущенные случаи должны быть заполнены следующими критериями:

, если отсутствует фактическая переменная AND Если следующая переменная 2 , топропущенное будет "2";если следующая переменная 1 , то пропущенным будет «1», если следующая переменная 0 , то пропущенным будет «0»

.последний столбец не будет включен в скрипт.

Довольно легко говорить об этом, но мне сложно его кодировать.

Мой интуитивно понятный код говорит примерно так:

for (i in 1:ncol(ds)) {
  if(is.na(ds[i]) & ds[i+1] == "2") ds[i] == "2"
}

И код, который вы можете воспроизвестиработать над:

ds <- data.frame(x1 = rep(sample(0:2),5), 
                 x2 = sample(0:2),
                 x3 = sample(0:2),
                 x4 = sample(0:2))
ds[ds == 0] <- NA

for (i in 1:ncol(ds)) {
  if(is.na(ds[i]) & ds[i+1] == "2") ds[i] == "2"
}

Просто чтобы прояснить, я знаю, что tidyverse (метла) действительно полезен для подобных ситуаций, и я буду рад, если кто-то сможет объяснить это с помощью среды tidyverse.

Большое спасибо!

Отредактировано : Если вы здесь, чтобы проверить ответ, добро пожаловать!Но вы также можете перейти к Функция / цикл, чтобы заменить NA значениями в соседних столбцах в R .Большое спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Может быть, нам понадобится fill

library(tidyverse)
ds %>% 
  fill(everything(), .direction = 'up')

Если мы хотим сделать это для каждой строки, используйте apply

library(zoo)
ds[] <- t(apply(ds, 1, function(x) na.locf(x, fromLast = TRUE, na.rm = FALSE)))

или pmap

pmap(ds, ~ c(...) %>%
             as_tibble %>%
             fill(value, .direction= 'up')) %>% 
   bind_cols %>%
   t %>%
   as_tibble
...