замена определенных значений на NA с помощью na_if - PullRequest
0 голосов
/ 15 февраля 2019

Мой фрейм данных имеет несколько значений: 9,969210e + 36, я хочу заменить их на NA.Это выглядит как

# A tibble: 1,308 x 3
       IMD     CRU dts       
     <dbl>   <dbl> <date>    
 1 9.97e36 9.97e36 1901-01-01
 2 9.97e36 9.97e36 1902-01-01
 3 9.97e36 9.97e36 1903-01-01
 4 9.97e36 9.97e36 1904-01-01 

dput (head (df))

structure(list(IMD = c(9.96920996838687e+36, 9.96920996838687e+36, 
9.96920996838687e+36, 9.96920996838687e+36, 9.96920996838687e+36, 
9.96920996838687e+36), CRU = c(9.96920996838687e+36, 9.96920996838687e+36, 
9.96920996838687e+36, 9.96920996838687e+36, 9.96920996838687e+36, 
9.96920996838687e+36), dts = structure(c(-25202, -24837, -24472, 
-24107, -23741, -23376), class = "Date")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L))

I follow R - Заменить определенное значение содержимого на NA as

df %>% mutate_at(vars(IMD, CRU), na_if, 9.969210e+36)
df %>% na_if(x=as.vector(df$IMD),y=9.97e36)

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

1 Ответ

0 голосов
/ 15 февраля 2019

na_if работает на векторах , а не data.frame , поэтому ваша первая попытка использования mutate будет наиболее правильной.Кроме того, он сравнивает точные значения для замены на NA.Тем не менее, ваши очень большие значения отображаются только с 15 цифрами;Я подозреваю, что есть много, намного больше.Поэтому никакие значения не соответствуют точно вашему условию (y).Это общая проблема при попытке точного сравнения с реальными значениями.

Также обратите внимание, что вы пытаетесь сравнить эти два значения.Какой самый большой?

9.969210e+36
9.96920996838687e+36

Вы можете сделать это быстро:

df %>%> mutate(
  IMD=ifelse(IMD > 9e36, NA, IMD),
  CRU=ifelse(CRU > 9e36, NA, CRU)
)

или создать функцию как

na_when_larger <- function(x, y) {
  x[x > y] <- NA
  x
}

df %>% mutate_at(vars(IMD, CRU), na_when_larger, 9.96e+36)

(попробуйте ввести na_ifв консоль без круглых скобок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...