这是我第一次在Stack上提问,但是自从几年前开始编写代码以来,我经常使用它。它总是对我有很大帮助。
我有两个表,其中许多列定义了一些条件(两个表上的列数完全相同),主要的是“公司”和“价格”。我的主要想法是合并它们,这样我就可以在各列中获得每个公司的每个特征,并查看它们是否与我的匹配。由于它们始终不会具有完全相同的价格,因此我的想法是使用一个新的列,将价格四舍五入,以便将它们合并在一起。
我在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
我想得到的理想结果是'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)
两天以来我一直在寻找解决方案...希望我很清楚,因为难以准确描述,但我会回答每个问题:)。
非常感谢。 高铁(Gautier)
答案 0 :(得分:0)
我回答斯蒂芬,并给出更多的精确度,谢谢您的回答。
这是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
我知道我一开始并不清楚,希望我的最初目标更加明确。
非常感谢。 高铁(Gautier)