Мне часто приходится это делать - сравнивать конкретные столбцы из 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?
Большое спасибо, Чапакс.