Как заменить значения нескольких типов на NA в кадре данных в R

У меня есть фрейм данных, где несколько типов значений должны быть заменены на NA, в то время как некоторые другие столбцы с этими значениями являются действительными данными для хранения. Например,

>df<-data.frame(
  x1=c("1999-09-09","2013-01-02","2013-06-08","1999-09-09","2013-06-08","2013-06-08"),
  x2=c(1,2,3,4,5,9),
  x3=c(7,8,9,9,12,9),
  x4=c(78,88,99,9,12,999)
  )
>df
          x1 x2 x3  x4
1 1999-09-09  1    7  78
2 2013-01-02  2    8  88
3 2013-06-08  3    9  99
4 1999-09-09  4    9   9
5 2013-06-08  5   12  12
6 2013-06-08  9    9 999

Где "1999-09-09", 9 и 99 - пропущенные значения для x1,x2 и x4, в то время как 9 - действительные наблюдения для x3. Кто-нибудь знает, как лучше это реализовать? У меня есть около 100 фреймов данных, и я хочу написать простую функцию для этой цели. Если у меня есть miss<-c("1999-09-09", 9, "",99), как применить это простым способом к df для замены на NA.

И более того, если есть другой подобный фрейм данных, где все эти типы значений являются действительными. Как отличить их в нескольких фреймах данных?

1 ответ

Решение

Попробуй это:

miss<-c("1999-09-09", 9, NA,99)
data.frame(Map(
 function(x,y) {x[x==y] <- NA; x;},
 df,
 miss
))

Результат:

          x1 x2 x3  x4
1       <NA>  1  7  78
2 2013-01-02  2  8  88
3 2013-06-08  3  9  NA
4       <NA>  4  9   9
5 2013-06-08  5 12  12
6 2013-06-08 NA  9 999
Другие вопросы по тегам