Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中按升序合并两个表_R - Fatal编程技术网

在R中按升序合并两个表

在R中按升序合并两个表,r,R,这是我第一次问有关堆栈的问题,但自从多年前开始编写代码以来,我经常使用它。这对我总是很有帮助 我有两个表,其中有许多列定义了一些条件(两个表上的列数完全相同),主要是“Company”和“Price”。我的主要想法是合并它们,这样我就可以在专栏中看到每个公司的每个特征,看看它们是否与我的相匹配。因为他们不会一直有完全相同的价格,我的想法是使用一个新的列,将价格四舍五入,这样将有一个匹配合并他们 我在R中使用了基于四舍五入价格列的join或merge函数(您将在下面看到)。但是当我合并它时,无论使

这是我第一次问有关堆栈的问题,但自从多年前开始编写代码以来,我经常使用它。这对我总是很有帮助

我有两个表,其中有许多列定义了一些条件(两个表上的列数完全相同),主要是“Company”和“Price”。我的主要想法是合并它们,这样我就可以在专栏中看到每个公司的每个特征,看看它们是否与我的相匹配。因为他们不会一直有完全相同的价格,我的想法是使用一个新的列,将价格四舍五入,这样将有一个匹配合并他们

我在R中使用了基于四舍五入价格列的join或merge函数(您将在下面看到)。但是当我合并它时,无论使用哪个函数,它都会使行混乱,并且最近的价格点在列中没有对齐,所以我无法比较它们

 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
Company.ZZ Price.ZZ Price\u 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
10 ZZ 309 300 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
我希望得到的理想结果是,“Price.ZZ”和“Price.XZ”列都将按升序排列。注意:我试着使用排列或排序函数来做这件事,但它在两列上都不起作用,只能一列接一列

这是我使用的代码,该文件只是用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)
库(plyr)
图书馆(dplyr)
库(数据表)

表我回答Stephan,并给出更精确的答案,顺便说一句,谢谢你的回答

这是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
我知道一开始我并不清楚,我希望我最初的目标更清楚

非常感谢。
高蒂尔

嘿,高蒂尔,你是通过哪一列
离开的?在我看来,没有连接列。那么为什么不直接使用
bind_cols(data_ZZ,data_XZ)
?否则,请您使用原始数据中的
标题(data_ZZ)
标题(data_XZ)
。您已将此作为答案发布。请改为编辑您的问题以使用此信息进行更新。(问题底部
r
标签下方有一个“编辑”按钮。)此外,编辑问题时,请显示与此小样本输入相对应的所需输出。这一澄清使您的输入变得清晰,但显示期望的结果将有助于明确您的目标。