首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在R中以升序合并两个表

在R中以升序合并两个表
EN

Stack Overflow用户
提问于 2018-08-28 00:16:06
回答 1查看 54关注 0票数 -1

这是我第一次在Stack上提问,但自从几年前开始编码以来,我经常使用它。它总是对我有很大帮助。

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

我在R中根据四舍五入的价格列使用了连接或合并函数(您将在下面看到)。但当我合并它时,无论使用哪个函数,它都会打乱行,最近的价格点在列中不对齐,所以我不能比较它们……

代码语言:javascript
复制
 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’列都将以升序排列。注:我尝试使用排列或排序函数来完成此操作,但它不能在两个列上都起作用,只能逐个执行。

这是我使用的代码,这个文件是用Excel创建的一个随机文件,有两列,一个公司名称和一些价格。

代码语言:javascript
复制
 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)

两天以来,我一直在努力寻找解决方案。我希望我说得很清楚,因为这很难准确描述,但我会回答每个问题:)。

非常感谢。戈蒂埃

EN

回答 1

Stack Overflow用户

发布于 2018-08-28 06:30:48

我回答斯蒂芬,并给出更多的精确度,谢谢你的回答。

这是data_ZZ和data_XZ的负责人。它不是原始数据,但我试图用假数据复制它(我没有复制其他条件,只复制了价格)。通常,有一个数据集,其中包含不同的公司名称、价格点和关于这些价格点的特征。我需要看看我是否匹配它们,这就是为什么我尝试按公司对其进行子集,然后将价格舍入到最接近的100,这样我就可以得到一个共同的价格来匹配,因为它们当然不总是相同的价格。然后以整数价格匹配它,但它变得混乱,我无法比较它。

代码语言:javascript
复制
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

我知道我一开始并不清楚,但我希望我最初的目标是更清晰的。

非常感谢。戈蒂埃

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52043300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档