Вы можете сравнить каждый столбец с if_else
сравнением.Но, пожалуйста, будьте осторожны с такого рода сравнением чисел с плавающей точкой.В этом примере все работает нормально:
library(tidyverse)
tbl <- read_table2(
"Gene Sample1 Sample2 Sample3
A 0.34 0.99 1
B 1.3 9.4 67
D 13 2 284
H 456 0.11 0.22
G 0 32 0.8"
)
Measurements <- c(0.8, 0.34, 0.22, 1, 32)
tbl %>%
mutate_at(vars(-Gene), ~if_else(. %in% Measurements, ., NA_real_))
#> # A tibble: 5 x 4
#> Gene Sample1 Sample2 Sample3
#> <chr> <dbl> <dbl> <dbl>
#> 1 A 0.34 NA 1
#> 2 B NA NA NA
#> 3 D NA NA NA
#> 4 H NA NA 0.22
#> 5 G NA 32 0.8
, но, как показано ниже, у вас не всегда есть хороший способ сравнить значения, которые должны быть равны.
(1.1-0.2) %in% c(0.9)
#> [1] FALSE
Вы можетесправьтесь с этим путем сопоставления символьных векторов вместо этого:
tbl %>%
mutate_all(as.character) %>%
mutate_at(vars(-Gene), ~if_else(. %in% as.character(Measurements), ., NA_character_))
#> # A tibble: 5 x 4
#> Gene Sample1 Sample2 Sample3
#> <chr> <chr> <chr> <chr>
#> 1 A 0.34 <NA> 1
#> 2 B <NA> <NA> <NA>
#> 3 D <NA> <NA> <NA>
#> 4 H <NA> <NA> 0.22
#> 5 G <NA> 32 0.8
, но это связано с собственным набором проблем, поскольку численно эквивалентные строки не будут эквивалентны по символам.
"0.990" %in% c(0.99)
#> [1] FALSE
Создано в2018-10-01 пакетом Представ (v0.2.0).