Объединить две таблицы в порядке возрастания в R - PullRequest
0 голосов
/ 27 августа 2018

Это первый раз, когда я задаю вопрос о стеке, но я часто его использую с тех пор, как начал кодировать много лет назад. Это всегда мне очень помогало.

У меня есть две таблицы со многими столбцами, которые определяют некоторые условия (одинаковое количество столбцов в двух таблицах), основными из которых являются «Компания» и «Цена». Моя основная идея состояла в том, чтобы объединить их, чтобы я мог иметь каждую характеристику каждой компании в столбцах и видеть, совпадают ли они с моей или нет. Поскольку они не всегда будут иметь одну и ту же цену, моя идея заключалась в том, чтобы использовать новый столбец с округленной ценой, чтобы их можно было объединить.

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

 Company.ZZ Price.ZZ Price_round Company.XZ Price.XZ
 1          ZZ       80         100         XZ       82
 2          ZZ       80         100         XZ       93
 3          ZZ      175         200         XZ      220
 4          ZZ      175         200         XZ      240
 5          ZZ      175         200         XZ      248
 6          ZZ      243         200         XZ      220
 7          ZZ      243         200         XZ      240
 8          ZZ      243         200         XZ      248
 9          ZZ      251         300       <NA>       NA
 10         ZZ      309         300       <NA>       NA
 11         ZZ      351         400         XZ      413
 12         ZZ      351         400         XZ      439
 13         ZZ      385         400         XZ      413
 14         ZZ      385         400         XZ      439
 15         ZZ      393         400         XZ      413
 16         ZZ      393         400         XZ      439
 17         ZZ      646         600         XZ      602
 18         ZZ      646         600         XZ      625
 19         ZZ      693         700         XZ      706
 20         ZZ      706         700         XZ      706
 21         ZZ      718         700         XZ      706
 22         ZZ      854         900       <NA>       NA

Идеальный результат, который я хотел бы получить, состоял бы в том, чтобы столбцы «Price.ZZ» и «Price.XZ» располагались в порядке возрастания. NB. Я пытался использовать для этого функции упорядочения или упорядочения, но они не работают в обоих столбцах, только один за другим.

Вот код, который я использовал, и файл представляет собой случайный файл, созданный в Excel с двумя столбцами, названием компании и некоторыми ценами.

 library(plyr)
 library(dplyr)
 library(data.table)
 table <- read.table( file.choose(), sep=";", header = TRUE)

 data_ZZ <- subset(table, table$Company == "ZZ")
 data_ZZ$Price_round <- round_any(data_ZZ$Price, 100)
 data_ZZ <- setDT(data_ZZ)[order(Price_round, Price)]
 colnames(data_ZZ) <- c("Company.ZZ", "Price.ZZ", "Price_round")
 data_YZ <- subset(table, table$Company == "YZ")
 data_YZ$Price_round <- round_any(data_YZ$Price, 100)
 data_YZ <- setDT(data_YZ)[order(Price_round, Price)]
 colnames(data_YZ) <- c("Company.YZ", "Price.YZ", "Price_round")
 data_XZ <- subset(table, table$Company == "XZ")
 data_XZ$Price_round <- round_any(data_XZ$Price, 100)
 data_XZ <- arrange(data_XZ, Price)
 colnames(data_XZ) <- c("Company.XZ", "Price.XZ", "Price_round")

 left_join(data_ZZ, data_XZ)

Я пытаюсь найти решение в течение двух дней ... Я надеюсь, что я был ясен, потому что это трудно описать точно, но я отвечу на каждый вопрос :).

Большое спасибо. Готье

1 Ответ

0 голосов
/ 28 августа 2018

Я отвечаю Стефану и уточняю, спасибо за ваш ответ.

Здесь находятся главы data_ZZ и data_XZ. Это не исходные данные, но я попытался воспроизвести их с поддельными данными (я не воспроизводил другие условия, только цену). Обычно существует набор данных с разными названиями компаний, ценовыми категориями и характеристиками, относящимися к этим ценовым точкам. Мне нужно посмотреть, соответствую ли я им, поэтому я попытался установить его по компаниям, а затем округлить цену до ближайших 100, чтобы я получил общую цену для сопоставления, поскольку они, конечно, не всегда имеют одинаковую цену. И после этого сопоставьте его по цене раунда, но он становится беспорядочным, и я не могу его сравнить.

head(Data_XZ)

Company.XZ Price.XZ Price_round ID
1         XZ       82         100  1
2         XZ       93         100  2
3         XZ      138         100  3
4         XZ      240         200  4
5         XZ      290         300  5
6         XZ      348         300  6

head(Data_YZ) same as ZZ

Company.YZ Price.YZ Price_round
 1:         YZ       76         100
 2:         YZ       93         100
 3:         YZ      146         100
 4:         YZ      240         200
 5:         YZ      280         300
 6:         YZ      348         300

Я знаю, что я не был ясен в начале, я надеюсь, что моя первоначальная цель яснее.

Большое спасибо. Готье

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...