Сравнение конкретных столбцов в 2 разных файлах с использованием R - PullRequest
2 голосов
/ 02 июля 2010

Мне часто приходится это делать - сравнивать конкретные столбцы из 2 разных файлов.Столбцы и форматы одинаковы, но столбцы, требующие сравнения, имеют данные в формате с плавающей запятой / экспоненциальным форматом, например, 0.0058104642437413175, -3.459017050577087E-4 и т. Д.

В настоящее время я использую код R ниже:1005 *

test <- read.csv("C:/VBG_TEST/testing/FILE_2010-06-16.txt", header = FALSE, sep = "|", quote="\"", dec=".")
prod <- read.csv("C:/VBG_PROD/testing/FILE_2010-06-16.txt", header = FALSE, sep = "|", quote="\"", dec=".")
sqldf("select sum(V10), sum(V15) from test")
sqldf("select sum(V10), sum(V15) from prod")

Я читаю в файлах и суммирую конкретные столбцы - V10, V15, а затем наблюдаю значения.Таким образом, я могу игнорировать очень небольшие различия в данных с плавающей запятой на строку.

Однако, в будущем я бы хотел установить процент допуска, т.е.if abs( (prod.V10 - test.V10)/prod.V10 ) > 0.01% и печатать только те номера строк, которые превышают этот предел допуска.

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

Например, если бы я делал это в Sybase, я написал бы что-то вроде:

select A.*, B.* 
from tableA A, tableB B
where abs( (A.Col15-B.Col15)/A.Col15) ) > 0.01%
  and A.Col1 = B.Col1
  and A.Col4 = B.Col4
  and A.Col6 = B.Col6

Если бы я попытался сделать то же самое, используя sqldf в R , он НЕ работает, поскольку файлы содержат 500K + строк данных.

Может кто-нибудь указать мне, как я могу сделать выше в R?

Большое спасибо, Чапакс.

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Ау, это sqldf причиняет мне боль - лучше использовать возможности простого R, чем мучить себя SQL:

which(abs(prod$V10-test$V10)/prod$V10>0.0001)

В более общей версии:

which(abs(prod[,colTest]-test[,colTest])/prod[,colTest]>tolerance)

гдеcolTest - это индекс столбца, который вы хотите проверить, а tolerance - допуск.

0 голосов
/ 02 июля 2010

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

...