这是我第一次在Stack上提问,但自从几年前开始编码以来,我经常使用它。它总是对我有很大帮助。
我有两个有很多列的表,它们定义了一些条件(两个表上的列数完全相同),主要的是'Company‘和'Price’。我的主要想法是合并它们,这样我就可以在列中列出每个公司的每个特征,看看它们是否与我的匹配。因为它们不会一直有完全相同的价格,所以我的想法是使用一个新的列,四舍五入的价格,这样就会有一个匹配来合并它们。
我在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’列都将以升序排列。注:我尝试使用排列或排序函数来完成此操作,但它不能在两个列上都起作用,只能逐个执行。
这是我使用的代码,这个文件是用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)
两天以来,我一直在努力寻找解决方案。我希望我说得很清楚,因为这很难准确描述,但我会回答每个问题:)。
非常感谢。戈蒂埃
发布于 2018-08-28 06:30:48
我回答斯蒂芬,并给出更多的精确度,谢谢你的回答。
这是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
我知道我一开始并不清楚,但我希望我最初的目标是更清晰的。
非常感谢。戈蒂埃
https://stackoverflow.com/questions/52043300
复制相似问题