У меня есть фрейм данных, содержащий данные датчиков, качество которых необходимо контролировать. Мне нужно иметь возможность отслеживать, какие изменения были внесены в данные, поэтому во фрейм данных был добавлен дополнительный столбец, содержащий комментарии. Я wi sh на i) заменяю значения -7999 значениями NA, и ii) добавляю столбец с именем QC_flag, который содержит комментарий, если значение -7999 было изменено на NA.
Есть ли способ сделать это в одной строке вместо того, чтобы вызывать функцию mutate дважды? т.е. как часть аргумента na_if или чего-то подобного.
require(tidyverse)
dat <- tibble(sensor_a = c(5, 3, 5, 4, 5, -7999, 3, 5, 4, 4),
sensor_b = c(300, 290, 370, 400, -7999, 200, 350, 480, 120, 280),
sensor_c = c(-7999, -7999, -7999, 1500, 1600, 1700, 1800, 1700, 1600, 1200))
dat2 <- dat %>%
mutate(QC_flag = case_when(sensor_a == -7999 ~ '7999 error [Sensor A]',
sensor_b == -7999 ~ '7999 error [Sensor B]',
sensor_c == -7999 ~ '7999 error [Sensor C]')) %>%
mutate(sensor_a = na_if(sensor_a, -7999),
sensor_b = na_if(sensor_b, -7999),
sensor_c = na_if(sensor_c, -7999))
Исходный фрейм данных выглядит так:
> dat
# A tibble: 10 x 3
sensor_a sensor_b sensor_c
<dbl> <dbl> <dbl>
1 5 300 -7999
2 3 290 -7999
3 5 370 -7999
4 4 400 1500
5 5 -7999 1600
6 -7999 200 1700
7 3 350 1800
8 5 480 1700
9 4 120 1600
10 4 280 1200
, а результат будет выглядеть так:
> dat2
# A tibble: 10 x 4
sensor_a sensor_b sensor_c QC_flag
<dbl> <dbl> <dbl> <chr>
1 5 300 NA 7999 error [Sensor C]
2 3 290 NA 7999 error [Sensor C]
3 5 370 NA 7999 error [Sensor C]
4 4 400 1500 NA
5 5 NA 1600 7999 error [Sensor B]
6 NA 200 1700 7999 error [Sensor A]
7 3 350 1800 NA
8 5 480 1700 NA
9 4 120 1600 NA
10 4 280 1200 NA