Как найти или сопоставить один кадр данных как подмножество (полное) в другой кадр данных в R? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть два кадра данных df1 и df2, приведенные ниже.df1 is

  c1       c2   c3  c4
   B  2.34000  1.00  I
   A 14.43000  2.10  J
   D  3.45515  1.00  K
   B  2.50000  2.09   
   A  2.44000  1.10  K
   K  5.00000  1.09  L

df2 is:

  c1    c2   c3
   B  2.34  1.00
   A 14.43  2.10
   D  3.43  1.00
   B  2.50  2.09
   E  5.00  1.09
   A  2.44  1.10

требование здесь таково: существует соответствие (или сравнение) между этими двумя фреймами данных.если df2 полностью найден (, что означает, что содержимое df2 соответствует любому подмножеству df1 независимо от порядка ) в df1 (либо точно соответствует df2, либо подмножеству df1 совпадает с df2), затем вывод true.Если не соответствует, верните false.

Я попробовал следующие методы:

1. left_join(df2,df1)
2. merge(df2,df1)
3. inner_join(df2,df1)
4. dd1[dd1$c1 %in% dd$c1,]

Все вышеперечисленные методы дают эти данные, которые являются общими для обоих, но не дают результатов в соответствии с требованиями.

Пожалуйста, предложите мне какое-нибудь решение для того же.

1 Ответ

1 голос
/ 11 июня 2019

Вы можете использовать match и interaction, например:

df1 <- read.table(text="c1       c2   c3  c4
   B  2.34000  1.00  I
   A 14.43000  2.10  J
   D  3.45515  1.00  K
   B  2.50000  2.09  NA
   A  2.44000  1.10  K
   K  5.00000  1.09  L", header=T)

df2 <- read.table(text="c1    c2   c3
   B  2.34  1.00
   A 14.43  2.10
   D  3.43  1.00
   B  2.50  2.09
   E  5.00  1.09
   A  2.44  1.10", header=T)

!any(is.na(match(interaction(df2), interaction(df1[names(df2)]))))
#[1] FALSE

#And packed in a function
"%completelyFoundIn%" <- function(x, y) {!any(is.na(match(interaction(x), interaction(y[names(x)]))))}

df2 %completelyFoundIn% df1
#[1] FALSE

df2[c(1,2,4,6),] %completelyFoundIn% df1
#[1] TRUE

df2[-5,c(1,3)] %completelyFoundIn% df1
#[1] TRUE
...