Совпадение / подмножество одного кадра данных на основе условных значений в другом кадре данных в R - PullRequest
1 голос
/ 23 октября 2019

У меня есть два фрейма данных:

df1=data.frame(A=c(1,2,4,8), B=c(4,3,2,9), C=c(10,11,1,2), D=c(12,40,3,4))
df2=data.frame(A=c(0.5,2.0,0.1,0.3), B=c(1.5,0.5,0.2,0.1), C=c(3.0,1.25,0.5,0.2), D=c(0.7,0.8,0.2,2.0))

Я хочу сохранить значения в df1, которые <= 0,8 в df1 для всех столбцов и <code>NA s в тех, которые> 0,8

Я попытался найти и заменить значения> 0,8 в df2:

df2[df2 >= 0.8] <- NA

Затем я попытался заменить все совпадающие значения в df1 на NA в df2, но что-то вроде приведенного ниже сценария хочет, чтобы столбцы нефреймы данных:

df1[match(df1, df2==NA)] 

Я хочу, чтобы итоговый фрейм данных выглядел следующим образом:

df3=data.frame(A=c(1,NA,4,8), B=c(NA,3,2,9), C=c(NA,NA,1,2), D=c(12,40,3,NA))

TIA

Ответы [ 2 ]

4 голосов
/ 24 октября 2019

Используйте mapply как это:

as.data.frame(mapply(function(x, y) ifelse(y <= 0.8, x, NA), df1, df2))

или

replace(df1, df2 > 0.8, NA)
3 голосов
/ 24 октября 2019

Мы можем напрямую назначить NA на основе логической матрицы

 NA^(df2 > 0.8) * df1

или

`is.na<-`(df1, df2 > 0.8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...