Как сравнить два кадра данных с различными значениями допуска для разных столбцов? - PullRequest
0 голосов
/ 24 апреля 2019

Есть два кадра данных, таких как:

первый кадр данных:

 d1       d2      d3
694   1.809509    74.9223
695   1.809510    73.2323
696   1.809511    23.7266
2243  1.465000    64.7542
2244  1.465001    85.7634
2651  1.143814    98.6344
2652  1.143813    46.9485

второй кадр данных:

  d1       d2     d3
694    1.809509   73.5324
2243   1.465000   72.7854
2652   1.143813   25.4734
2784   1.162545   61.3456
2924   1.989442   88.9845
2846   1.929882   96.3874

Я хочу сравнить эти два фрейма данных. Я пробовал с одним уровнем допуска в методе all.equal() на обоих кадрах но требование к разным столбцам имеет различное значение допуска. например, допуск d1 составляет 3 или 40%, значение допуска для d3 составляет 2 или 30% и для d2 '1' или 23%. При сравнении он должен проходить под этими значениями допуска.

Помогите мне в решении этой проблемы. Каждое усилие заметно.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Эта функция проверяет, является ли столбец с тем же именем или в той же позиции большим или меньшим указанного порогового значения.

x <- mtcars
y <- mtcars

y[ 3, 5] <- 300
y[ 2, 5] <- 4


y[ 3, 6] <- 2.8
y[ 2, 6] <- 4



test <-function( Z , TOL ){ as.numeric( 
    x[ , Z] > ( y[ , Z] * (1+TOL)) | 
    x[ , Z] < ( y[ , Z] * (1-TOL)) 
    )
    }


#compare the whole dataset at 20%
do.call( cbind, lapply( names( x )  , test , .2 ) )

# compare a specific column at 20 and 40 % difference
x$morethan20 <-  test( "drat" , .2 )
x$morethan40 <-  test( "wt" , .4 )
0 голосов
/ 24 апреля 2019

Если я правильно понимаю, вы ищете ту же функцию.Идентичный тест, если два объекта совпадают.

x <- mtcars
y <- mtcars

identical( x, y )

y[ 3, 5] <- 300

identical( x, y )

Вы можете зациклить одинаковую функцию для каждого столбца.

for( i in names( x ) ){
    print( identical( x[,i] , y[,i]) )
}

Кроме того, в этом случае, когда строки и столбцы находятся втот же порядок - вы можете рассчитать разницу

z <- x - y
sapply( z , summary)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...