как использовать anti_join для многих переменных одновременно? - PullRequest
0 голосов
/ 10 июля 2020

Я хочу удалить некоторые значения n переменных, содержащихся в data1 (кровь), из data2 (outlier).

new <- anti_join(blood1, outlier)

Я использую anti_join без опции «by» ... результат: «Объединение по = c (« DIM »,« PCV »,« GLUOX »,« COLEST »,« UREA »,« ca »,« P »,« Mg »,« Na »,« K » »,« Cl »,« Zn »,« церулоплазмин »,« альбунин »,« глобулин »,« GOT »,« GGT »,« билирубина »,« ALP »,« аптоглобина »,« NEFA »,« BHB », «креатинина», «Параокс», «ROMt», «SHp», «FRAP», «MPO», «AOPP_ C») «... но неверно, anti_join сохраняет все значения данных1 .

Data1

DIM PCV GLUOX 
23  14  0.23  
24  15  0.15
28  14  0.01
132  35  0.02
128 12  0.14

Data2

DIM PCV GLUOX 
128 35  0.14
132 NA  0.23 
NA  NA  0.15

Мой ожидаемый результат:

DIM PCV GLUOX 
23  14  NA  
24  15  NA
28  14  0.01
NA  NA  0.02
NA  12  NA

1 Ответ

2 голосов
/ 10 июля 2020

Здесь вы можете использовать Map, чтобы заменить значения df2, представленные в df1, на NA.

df1[] <- Map(function(x, y) replace(x, x %in% y, NA), df1, df2)
df1

#  DIM PCV GLUOX
#1  23  14    NA
#2  24  15    NA
#3  28  14  0.01
#4  NA  NA  0.02
#5  NA  12    NA

ИЛИ, если вам нужно решение tidyverse, мы можем использовать map2_df с таким же логом c.

purrr::map2_df(df1, df2, ~replace(.x, .x %in% .y, NA))
...