перекодировать целые числа в векторе, чтобы они вместо этого регистрировались как NA? - PullRequest
0 голосов
/ 17 апреля 2020

Я надеюсь, что это не глупый вопрос, но я ДЕЙСТВИТЕЛЬНО изо всех сил пытаюсь перекодировать переменную в R так, чтобы определенные значения регистрировались как NA вместо целого числа заполнителя, которое было прочитано. Респонденты, которые не ответили на вопрос для этого столбца первоначально были закодированы как -88, -89 и -99 вместо NA, и я знаю только, как полностью удалить их из этого столбца.

Я хочу сохранить эту строку, просто зарегистрируйте эти входные данные как отсутствующие. Перекодирование не работает b / c NA не является значением

Спасибо!

Ответы [ 5 ]

0 голосов
/ 20 апреля 2020

Еще раз большое спасибо всем за вашу помощь!

Сначала я преобразовал переменную в цифру c, затем мне показалось, что это работает:

anesCSV $ clinton.withNA < - заменить (anesCSV $ clintonthermo_numeri c, anesCSV $ clintonthermo_numeric% в% c (- 88, -89, -99), NA)

Как первоначально предлагалось:

v <- replace (v, v% в% c (- 88, -89, -99), NA) </p>

Я создал новую переменную для личного хранения результатов!

0 голосов
/ 17 апреля 2020

Правильный / наиболее адекватный ответ на этот вопрос зависит от точной специфики ваших данных, если у вас есть переменная numeric и все остальные значения положительны, это будет работать.

somedata <- 
tibble::tribble(
  ~v1, ~v2,
  1,   2,
  3,   4,
  -88, 5,
  6,   -89,
  -99, 1
)

library(tidyverse)

somedata %>% 
  mutate(v1 = ifelse(v1 < 0, NA, v1))

# A tibble: 5 x 2
     v1    v2
  <dbl> <dbl>
1     1     2
2     3     4
3    NA     5
4     6   -89
5    NA     1
0 голосов
/ 17 апреля 2020

Вот один из способов сделать это, который заменит все значения -88, -89 и -99 в ваших данных:

for (i in c(-88, -89, -99)){
  data.df[data.df == i] <- NA
}

Если вам нужно просто заменить в одном столбце (например, столбец ' х '):

for (i in c(-88, -89, -99)){
  data.df$x[data.df$x == i] <- NA
}
0 голосов
/ 17 апреля 2020

Может быть, вы можете попробовать replace

v <- replace(v,v%in%c(-88,-89,-99),NA)

так, чтобы

> v
[1]  1  2 NA NA -1 NA NA

Dummy Data

v <- c(1,2,-88,-89,-1,-99,-89)
0 голосов
/ 17 апреля 2020

Вы можете использовать оператор %in%, чтобы найти все позиции в векторе, которые соответствуют другому вектору, а затем установить их в NA следующим образом:

dat = data.frame(V1 = c(10, 20, 30, -88, -89, -99))
dat$V1[dat$V1 %in% c(-88, -89, -99)] = NA

dat

 V1
1 10
2 20
3 30
4 NA
5 NA
6 NA
...